2012-07-26 73 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

相關問題