ViewPager切换FragmentPagerAdapter

时间:2012-07-26 14:14:13

标签: android android-fragments android-viewpager

我有一个由ViewPager填充的FragmentPagerAdapter。我想从第一个适配器换另一个。问题是之前加载的所有页面(在使用第一个适配器时)仍然是旧的。

我查看了FragmentPagerAdapter的源代码,并猜测问题是因为instatiateItem()实现而发生的。使用其中包含position和conatiner id的标记,该方法检查该位置是否已有Fragment。如果Fragment带有此标记,则会附加该标记。设置新适配器时,容器ID和位置不会更改,因此它会找到旧的Fragment

你知道一种删除所有旧片段的方法吗?

1 个答案:

答案 0 :(得分:8)

我意识到Fragment标记使用的是getItemId()而不是位置获取的id。为了解决我的问题,我覆盖了getItemId()并在不同的FragmentPagerAdapter中使用完全不同的ID。

@Override
public long getItemId(int position) {
    return mPagerId*100+position;
}

mPagerId是在构造函数中分配的唯一整数。如果您有超过100页,则应将1000替换为1000。