我正在使用 ViewPager 来显示我的图像。
这些图像作为列表从一个 Activity 发送到另一个,然后我在 ViewPager 中显示它们。
但问题是,如果我单击删除按钮,图像会被删除并从列表中移除,但它仍会显示在下一张图像上。
例如第一张图片的高度是全屏 > 我将其删除,viewpager 移动到下一张图片,这张图片的高度为 350,然后高于和低于 350 的背景显示旧图片...
此外,当我尝试删除第二个最后一项时,我得到了一个 IndexOutOfBoundsExceptiom...
这是我的代码 -
public class ImageViewer extends AppCompatActivity {
public int position;
private ArrayList<String> list;
private HackyViewPager pager;
private ImagePagerAdapter ipa;
private List<PhotoView> photoViewList;
private HelperMethods helperMethods;
private static boolean sendResult = false;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.img);
sendResult = false;
helperMethods = new HelperMethods(ImageViewer.this);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setDisplayShowHomeEnabled(true);
getSupportActionBar().hide();
Intent i = getIntent();
position = i.getExtras().getInt("position");
list = i.getStringArrayListExtra("list");
pager = (HackyViewPager) findViewById(R.id.pager);
photoViewList = new ArrayList<PhotoView>();
for(int val = 0; val < list.size(); val++) {
PhotoView photoView = new PhotoView(this);
photoView.setZoomable(true);
Glide.with(ImageViewer.this)
.load(new File(list.get(val)))
.into(photoView);
photoViewList.add(photoView);
}
ipa = new ImagePagerAdapter(photoViewList);
pager.setAdapter(ipa);
pager.setCurrentItem(position);
FloatingActionButton dlt = (FloatingActionButton) findViewById(R.id.dlt);
dlt.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
AlertDialog.Builder builder = new AlertDialog.Builder(ImageViewer.this);
builder.setMessage("Sure to Delete this Image?")
.setNegativeButton("Nope", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
})
.setPositiveButton("Delete", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
getFilePos().delete();
ipa.remove(pager.getCurrentItem());
Toast.makeText(ImageViewer.this, "Image Deleted", Toast.LENGTH_SHORT)
.show();
}
});
builder.create()
.show();
}
});
}
public File getFilePos() {
return new File(list.get(pager.getCurrentItem()));
}
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()){
case android.R.id.home:
onBackPressed();
break;
}
return true;
}
static class ImagePagerAdapter extends PagerAdapter {
private List<PhotoView> images;
public ImagePagerAdapter(List<PhotoView> images) {
this.images = images;
}
@Override
public Object instantiateItem(ViewGroup container, int position) {
PhotoView imageView = images.get(position);
container.addView(imageView);
return imageView;
}
@Override
public void destroyItem(ViewGroup container, int position, Object object) {
container.removeView(images.get(position));
}
@Override
public int getCount() {
return images.size();
}
void remove(int pos) {
images.remove(pos);
notifyDataSetChanged();
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
@Override
public boolean isViewFromObject(View view, Object o) {
return view == o;
}
}
最佳答案
从列表中删除图像后,您必须调用
notifyitemremoved();
on 方法在适配器上移除。
关于android - 从 ViewPager 中删除图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50541178/