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