我有一个 ViewPager
,它由一个 FragmentPagerAdapter
填充。我想从第一个适配器换成另外两个。问题是之前加载的所有页面(同时具有第一个适配器)仍然是旧页面。
我查看了FragmentPagerAdapter
的源代码,猜测问题的发生是因为instatiateItem()
实现。使用其中包含位置和容器 ID 的标签,该方法检查该位置是否已经有一个 Fragment
。当有带有此标签的 Fragment
时,它会被附加。设置新适配器时容器 ID 和位置不会更改,因此它会找到旧的 Fragment
。
你知道删除所有旧 fragment 的方法吗?
最佳答案
我意识到 Fragment 标签使用的是通过 getItemId()
获取的 id 而不是位置。为了解决我的问题,我覆盖了 getItemId()
并在不同的 FragmentPagerAdapter
中使用了完全不同的 ID。
@Override
public long getItemId(int position) {
return mPagerId*100+position;
}
mPagerId 是在构造函数中分配的唯一整数。如果您的页面超过 100 页,则应将 100 替换为 1000。
关于android - ViewPager 切换 FragmentPagerAdapter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11671221/