我有一个由ViewPager
填充的FragmentPagerAdapter
。我想从第一个适配器换另一个。问题是之前加载的所有页面(在使用第一个适配器时)仍然是旧的。
我查看了FragmentPagerAdapter
的源代码,并猜测问题是因为instatiateItem()
实现而发生的。使用其中包含position和conatiner id的标记,该方法检查该位置是否已有Fragment
。如果Fragment
带有此标记,则会附加该标记。设置新适配器时,容器ID和位置不会更改,因此它会找到旧的Fragment
。
你知道一种删除所有旧片段的方法吗?
答案 0 :(得分:8)
我意识到Fragment标记使用的是getItemId()
而不是位置获取的id。为了解决我的问题,我覆盖了getItemId()
并在不同的FragmentPagerAdapter
中使用完全不同的ID。
@Override
public long getItemId(int position) {
return mPagerId*100+position;
}
mPagerId是在构造函数中分配的唯一整数。如果您有超过100页,则应将1000替换为1000。