最近做的一个需求是拍照显示图片的需求,用的就是viewpager,但是在删除的时候老是会出现问题,也是百度了很久。加上数次的调试,最后才解决问题。
在这里和代价分享下:
首先我们在删除的时候肯定要将当前的视图关闭
public void delete_image(View view){
//Toast.makeText(getApplicationContext(), "dasa",0).show();
AlertDialog.Builder builder=new AlertDialog.Builder(Roomxx_FWDJ_cjfwzp_Activity.this);
builder.setCancelable(false);
builder.setTitle("郑重提示");
builder.setMessage("是否删除这张照片?");
builder.setPositiveButton("确定",new DialogInterface.OnClickListener() {
public void onClick(final DialogInterface arg0, int arg1) {
new Thread(new Runnable() {
public void run() {
bitmapUrls_takephote.remove(bitmapUrls.get(vp_fwdj_zpcj.getCurrentItem()));
bitmapUrls.remove(bitmapUrls.get(vp_fwdj_zpcj.getCurrentItem()));
pageViews.remove(pageViews.get(vp_fwdj_zpcj.getCurrentItem()));
String nno;
try {
nno = MainActivity.sqliteDataHelp.queryFwdj_zpcjForNNo(meta_addr_id).get(vp_fwdj_zpcj.getCurrentItem());
MainActivity.sqliteDataHelp.delete_fwdj_fromNNo(nno);
} catch (Exception e) {
e.printStackTrace();
//如果报错的话那么就是该图片还没有保存,就不需要去做数据库的操作,只需要删除路径就好了
}
arg0.dismiss();
Message message=new Message();
message.what=DELETE_SUCCESS;
mHandler.sendMessage(message);
}
}).start();
}
});
builder.setNegativeButton("取消",new DialogInterface.OnClickListener() {
public void onClick(DialogInterface arg0, int arg1) {
}
});
builder.create().show();
}
然后就是要要刷新数据
case DELETE_SUCCESS:
Toast.makeText(getApplicationContext(), "图片删除成功", 0).show();
adapter.notifyDataSetChanged();
break;
最后我们要重写适配器的getItemPosition和destroyItem
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
//container.removeView(bitmapUrls.get(position));
((ViewPager) container).removeView((View)object);
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
搞定。就是这样子,希望可以帮到大家。