其他分享
首页 > 其他分享> > android – 删除任何视图时都不会调用PageAdapter的destroyItem函数

android – 删除任何视图时都不会调用PageAdapter的destroyItem函数

作者:互联网

我正在研究一个Android应用程序并在视图中使用viewpager.我正在使用PagerAdapter在viewpager中显示选项卡的视图.
我必须动态添加/删除一些标签.当我添加任何选项卡及其视图时,正在调用instantiateItem函数并且选项卡已成功添加.但是当我从viewpager中删除任何选项卡时,应该调用destroyItem函数,但是它没有被调用,并且Tab的视图没有被删除.
这是我用来添加/删除标签的代码.

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;
    }
}

当我添加任何Tab以及它的视图时,我使用以下方法添加

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

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

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

但是当我从android中的适配器中删除任何Tab及其视图时,不会调用destroyItem函数.如果有人对此有任何疑问,请帮助我.

非常感谢先进.

解决方法:

迟到了,但是:你需要实现getItemPosition才能调用destroyItem.在这种情况下,这样的事情应该工作:

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

标签:android,android-viewpager,android-pageradapter
来源: https://codeday.me/bug/20190702/1352803.html