後不會刷新我有,我可以在我的導航欄與開片段的列表:ViewPager更換片段
getSupportFragmentManager().beginTransaction().replace(android.R.id.tabcontent, l_Fragment).commit();
片段都來自同一類型 - >CDMBasicMovieFragment extends Fragment
這裏面片段我有一個viewpager,我打電話給getFragmentManager()
。在這裏,我有這個問題。第一個片段很好,但在替換第一個片段後,viewpager爲空。然後我將getFragmentManager()
更改爲getChildFragmentManager()
。現在所有的碎片都很好。但只有一次。替換回第一個片段後,我有同樣的問題。我究竟做錯了什麼?
EDIT1:
我的視圖層次:
活動
- CDMBasicMovieFragment 1
- ViewPager
- CDMMovieListFragment
- ViewPager
- CDMBasicMovieFragment 2
- ViewPager
- CDMMovieListFragment
- ViewPager
- CDMBasicMovieFragment 3
- ViewPager
- CDMMovieListFragment
- ViewPager
- CDMBasicMovieFragment 1
EDIT2:
我試圖創建的片段唯一的id並用它們替代上,但我已經有同樣的問題:
getSupportFragmentManager().beginTransaction().replace(android.R.id.tabcontent, l_Fragment, uniqueFragmentTag).commit();
EDIT3:
我發現了一個可能的解決方案: OnCreateView called multiple times/Working with ActionBar and Fragments 我什麼都試過從這個鏈接。我已經有同樣的問題......任何人都可以幫忙嗎?
UPDATE:
一個密集的調試會話後,)我發現這一點:
當裝載第一CDMMovieListFragment
FragmentPagerAdapter的instantiateItem
被調用,並檢查是否已經有一個片段。這不是這就是爲什麼它在內部調用
mCurTransaction.add(container.getId(), fragment, makeFragmentName(container.getId(), itemId));
當我更換CDMBasicMovieFragment
其中包括fragmentpageradapter(裏面是加CDMMovieListFragment
),並嘗試加載第二CDMBasicMovieFragment
那麼它仍然是相同的fragmentmanager。
FragmentPagerAdapter的instantiateItem
被調用並找到舊的CDMMovieListFragment
。現在它改爲mCurTransaction.attach(fragment);
。我認爲這是問題。但是我很困惑...下面的代碼片段
這與您的情況有關嗎? mViewPager =(ViewPager)findViewById(R.id.pager); //必須設置OffscreenPageLimit,因爲默認值爲1,我們有3個選項卡。如果在裝載機完成時沒有關閉屏幕,則會崩潰,否則會崩潰。 mViewPager.setOffscreenPageLimit(2); – usajnf
我不想更改viewpager內的片段。我想替換包含viewpager的片段。檢查我的編輯。我添加了我的視圖層次。 – beeb
我明白了。這有點複雜。 – usajnf