我正在使用ViewPager来显示我的图片。
这些图像作为列表从一个活动发送到另一个活动&然后我在ViewPager中显示它们。
但问题是,如果我点击删除按钮,他们就会删除图片&已从列表中删除但仍显示在下一个图像上。
e.g。第一张图片的高度为全屏>我删除它,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;
}
}
}
答案 0 :(得分:0)
从列表中删除图像后,您必须调用
notifyitemremoved();
on方法删除适配器。
答案 1 :(得分:0)
这将为您服务
您必须再次将适配器设置为viewpager,然后它将刷新内容。
我的PagerAdaper中的removeView(int pos)
public void removeView(int index) {
imageFileNames.remove(index);
notifyDataSetChanged();
}
无论我在哪里删除文件,我都必须这样做
imagePagerAdapter.removeView(currentPosition);
viewPager.setAdapter(imagePagerAdapter);
编辑:
以下方法有效,您可以应用以下方法。
public void updateView(int pos){
viewPager.setAdapter(null);
imagePagerAdapter =new ImagePagerAdapter(YOUR_CONTEXT,YOUR_CONTENT);
viewPager.setAdapter(imagePagerAdapter);
viewPager.setCurrentItem(pos);
}
将YOUR_CONTEXT替换为上下文,将内容替换为内容名称,即更新列表或其他内容。