2012-07-26 77 views
4

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

我查看了FragmentPagerAdapter的源代码,并猜测出现问题的原因是instatiateItem()的实现。使用具有位置和容器标识的标签,该方法检查该位置是否已有Fragment。当有这个标签的Fragment它被附上。设置新适配器时,容器ID和位置不会更改,因此它会找到旧的Fragment

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

回答

8

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

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

mPagerId是一个唯一的整数,其在构造函​​数中指定。如果你有超过100页,你应该用1000替换100.

+0

不幸的是,它只能在API级别高于16 – 2013-03-14 10:41:26

+1

看看http://stackoverflow.com/a/10852046/1743813答案。 – 2013-03-14 10:45:35

+0

@AntonM。它在HTC 2.2上运行得非常好,感谢gabriel – Ali 2013-07-11 10:29:15

相关问题