【BUG系列】Fragment中巢狀Fragment,不顯示

Wing_Li發表於2018-11-29

如果本文幫助到你,本人不勝榮幸,如果浪費了你的時間,本人深感抱歉。 希望用最簡單的大白話來幫助那些像我一樣的人。如果有什麼錯誤,請一定指出,以免誤導大家、也誤導我。 本文來自:www.jianshu.com/users/320f9… 感謝您的關注。

先看一段錯誤程式碼,這段程式碼寫在一個 Fragment 中:

private void initView(){
	mViewPageAdpater = new ViewPageAdpater( getFragmentManager() );
	
	mFragments.add( new BoonListFragment() );
	mTitles.add( "title1" );
	mFragments.add( new BoonListFragment() );
	mTitles.add( "title2" );
	mFragments.add( new BoonListFragment() );
	mTitles.add( "title3" );
	
	mViewPageAdpater.setFragments( mFragments, mTitles );		
}
複製程式碼

這段程式碼看上去一切正常,但是有時候就是好好的就是現實不出來,找來找去死活找不到原因。 一切東西都是普通的再不普通不過的 List 或者 Adapter,List這麼簡單的東西還能出問題? 那就是Adapter的問題了,Adapter裡面實現的不對嗎?也沒有問題啊,就那麼簡單的幾個方法。

最後終於發現,問題就在 new ViewPageAdpater( getFragmentManager() ); 這裡。

之前就知道 fragment中巢狀fragment 應該使用 getChildFragmentManager() ,每次用起來都是忘了。 自己把自己丟坑裡去了。 發現了之後,清楚的想起了,自己之前被坑過一次,這次又............


正確的寫法:

private void initView(){
	mViewPageAdpater = new ViewPageAdpater( getChildFragmentManager() );
	
	mFragments.add( new BoonListFragment() );
	mTitles.add( "title1" );
	mFragments.add( new BoonListFragment() );
	mTitles.add( "title2" );
	mFragments.add( new BoonListFragment() );
	mTitles.add( "title3" );
	
	mViewPageAdpater.setFragments( mFragments, mTitles );		
}
複製程式碼

以後每當在 Fragment 中要用到 FragmentManager 的時候一定要記住,使用 getChildFragmentManager()

相關文章