android - 删除任何 View 时,不会调用 PageAdapter 的 destroyItem 函数

标签 android android-viewpager android-pageradapter

我正在开发一个 android 应用程序并在 View 中使用 viewpager。我正在使用 PagerAdapter 在 vi​​ewpager 中显示选项卡的 View 。 我必须动态添加/删除一些选项卡。当我添加任何选项卡及其 View 时,将调用 instantiateItem 函数并成功添加选项卡。但是当我从 viewpager 中删除任何选项卡时,应该调用 destroyItem 函数,但它没有被调用,Tab 的 View 也没有被删除。 这是我用来添加/删除选项卡的代码。

public List<View> viewsList = new ArrayList();
public HashMap<Integer, View> GridViewList = new HashMap<>();

MyAdapter myAdapter = new MyAdapter();
viewPager.setAdapter(myAdapter);
viewPager.setOffscreenPageLimit(myAdapter.getCount() + 1);

    private class MyAdapter extends PagerAdapter {
    public MyAdapter() {
        super();
    }

    @Override
    public int getCount() {
        return viewsList.size();
    }

    @Override
    public Object instantiateItem(ViewGroup container, int position) {
        View v = viewsList.get(position).rootView;
        container.addView(v, 0);
        return v;
    }

    @Override
    public void destroyItem(ViewGroup container, int position, Object view) {
        container.removeView((View)view);
    }

    @Override
    public boolean isViewFromObject(View view, Object key) {
        return key == view;
    }
}

当我添加任何选项卡及其 View 时,我使用以下方法添加

View view = new View(); // I am making Custom View here
viewsList.add(view);
GridViewList.put(Id, view);
myAdapter.notifyDataSetChanged();

当我删除任何 View 时,我使用以下方法:

viewsList.remove(GridViewList.get(Id));
GridViewList.remove(Id);
myAdapter.notifyDataSetChanged();

但是当我删除任何选项卡时,并没有调用 destroyItem 函数,它是从 android 中的适配器查看的。如果有人对此有任何想法,请帮助我。

非常感谢。

最佳答案

聚会晚了,但是:您需要实现 getItemPosition 才能调用 destroyItem。在这种情况下,像这样的东西应该起作用:

@Override public int getItemPosition(Object itemIdentifier) {
  int index = viewsList.indexOf(itemIdentifiers);
  return index == -1 ? POSITION_NONE : index;
}

关于android - 删除任何 View 时,不会调用 PageAdapter 的 destroyItem 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39503528/

相关文章:

android - 如何打开低于 1024 的套接字

android - fragment 中的 AsyncTask 不更新 UI

java - 同一 Fragment 中的多个 ViewPager

android - 如何实现 PagerAdapter 的 View 回收机制?

java - Oreo ViewPager 显示外部存储文件路径中的图像

android - 当前维护的cordova-plugin-crosswalk-webview 有什么替代方案吗?

android - (Xamarin)应用程序中 REST 调用的本地预加载和缓存层以减少等待?

android - 从网站打开 UWP 应用程序

android - CardView 的阴影在 Android Lollipop 上不可见

android - PagerAdapter 中的 MapFragment