android - 从 ViewPager 中删除图像

标签 android android-viewpager

我正在使用 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/

相关文章:

android - Viewpager 变得太高

android-recyclerview - Espresso 滑动手势测试在 Android 模拟器上失败,但在真实设备上通过

java - Android 构造函数未定义

android - 用于非 Android 范围的 Dagger 刀柄预定义组件

java - 如何从文本文件中获取特定的行并在android中显示数组列表

android - 仅在第二次导航到 Fragment 时导致 java.IllegalStateException 错误,No Activity

Android Wear DotsPageIndicator 第一次淡化而不是始终可见

java - Android java从字符串访问URL而不是硬编码

android - 无法动态膨胀Fragment

android - 带有 Google Map API v2 的 ViewPager 变黑