5

我有一个ViewPagerFragmentPagerAdapter. 我想从第一个适配器更改两个。问题是之前加载的所有页面(在拥有第一个适配器时)仍然是旧页面。

我查看了源代码FragmentPagerAdapter并猜测问题是由于instatiateItem()实现而发生的。使用其中包含位置和容器 id 的标签,该方法检查Fragment该位置是否已经存在 a。当有一个Fragment带有这个标签的时候,它就会被附加。设置新适配器时容器 id 和位置不会改变,因此它会找到旧Fragment的 s。

你知道去除所有旧碎片的方法吗?

4

1 回答 1

11

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

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

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

于 2012-07-29T16:04:19.373 回答