如果本文幫助到你,本人不勝榮幸,如果浪費了你的時間,本人深感抱歉。 希望用最簡單的大白話來幫助那些像我一樣的人。如果有什麼錯誤,請一定指出,以免誤導大家、也誤導我。 本文來自: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()。