我使用自定义FragmentAdapter将片段保存到List
中我想要的过程:
1)用户单击列表项并在参数中创建一个新的Activity,然后使用TagsPageAdapter.addPage(fragment)创建片段;
2)这个创建的片段在他的参数
中有一个“id”int3)当我点击addPage时,它会验证List中的所有片段以检查是否有任何片段具有id,如果是,则恢复它,如果没有,则创建new并添加到列表中
这三个步骤是完全正常的,问题是当我尝试删除一个时(下面的适配器代码后出错)
适配器:
private class TabsPagerAdapter extends FragmentPagerAdapter {
private Bundle bundle;
private String titulo;
private TabsPagerAdapter(FragmentManager fm) {
super(fm);
}
@Override
public LeiAberta getItem(int position) {
current = fragments.get(position);
return current;
}
private void addPage(LeiAberta page) {
boolean found = false;
for (int i = 0; i < fragments.size(); i++) {
leiAberta = fragments.get(i);
if (leiAberta != null) {
if (leiAberta.getArguments() != null) {
if (leiAberta.getArguments().getInt("id") == page.getArguments().getInt("id")) {
viewPager.setCurrentItem(i);
found = true;
}
}
}
}
if (!found) {
fragments.add(page);
notifyDataSetChanged();
viewPager.setCurrentItem(fragments.size() - 1);
}
}
@Override
public int getCount() {
return fragments.size();
}
@Override
public CharSequence getPageTitle(int position) {
this.bundle = fragments.get(position).getArguments();
if (this.bundle != null) {
this.titulo = bundle.getString("titulo");
}
return titulo;
}
}
我用什么来删除列表中的片段:
int current_position = viewPager.getCurrentItem();
if(current_position == 0) {
viewPager.setCurrentItem(current_position +1);
} else {
viewPager.setCurrentItem(current_position -1);
}
fragments.remove(current_position);
adapter.notifyDataSetChanged();
如果我删除当前标签/片段,然后在列表中打开另一个项目,将添加另一个标签,无论哪个项目,它只是将旧片段恢复到相同位置,由于某种原因,删除的位置列表中的片段保持填充阴影,奇怪的是:当我删除时list.size();
减少,为什么?从哪里恢复这个旧片段?我怎么能真正摧毁它,所以addPage
并没有在“阴影”中找到它
答案 0 :(得分:0)
和其他许多人
显然唯一的解决方案就是这个框架:
使用此覆盖
@Override
public int getItemPosition(Object object) {
if (fragments.contains(object)) return fragments.indexOf(object);
else return POSITION_NONE;
}