我正在开发一个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函数。如果有人对此有任何疑问,请帮助我。
非常感谢先进。
答案 0 :(得分:2)
晚会,但是:您需要实施getItemPosition
才能调用destroyItem
。在这种情况下,像这样的东西应工作:
@Override public int getItemPosition(Object itemIdentifier) {
int index = viewsList.indexOf(itemIdentifiers);
return index == -1 ? POSITION_NONE : index;
}