由於Fragment的方便性,現在很多人開始大量使用Fragment。 今天使用時遇到各問題,記錄下來並分享下。 使用Fragment都會用FragmentActivity ,特別是在用到ViewPager時。因為需要FramgmentManager, 而我這次有兩個fragment中都用到了V
由於Fragment的方便性,現在很多人開始大量使用Fragment。 今天使用時遇到各問題,記錄下來並分享下。
使用Fragment都會用FragmentActivity ,特別是在用到ViewPager時。因為需要FramgmentManager,
而我這次有兩個fragment中都用到了ViewPager。 其實也是開始的時候沒考慮好。然後都使用的FragmentActivity的FramgmentManager去處理。 但是發現在第一個頁面打開後,進入第二個頁面,此時第二個頁面上內容是空的,查看log,第二個頁面的ViewPager 的子view的onCreatView 方法並沒有調用,這是什麼鬼。。
百度發現是PagerAdapter的instantiateItem 中使用tag從FramgmentManager中查詢Fragment的,如果找到了,會直接使用之前的,而不會重新創建,
PagerAdapter的tag生成是根據你的pagerID 和 index 生成的。
說明什麼呢?說明第一個頁面中存在和第二個頁面相同tag的Fragment 。也就是有兩個fragment具有相同的父id,和index。
index有重覆的很好理解,那麼就是說明使用了相同的pagerID。
然後想起來當時直接複製的佈局文件,所以id相同,改了id,問題迎刃而解。
這個問題在於倆個關鍵的地方:
1.使用了相同的FramgmentManager實例
2. ViewPager的id相同。
所以平時使用這種容器類的控制項,儘量使id不同,否則就可能產生類似的問題。
參考 :http://www.trinea.cn/android/android-source-code-analysis/multi-viewpager-to-fragment-not-init/