Fragment addToBackStack(null)的作用

Fragment常用於一個activity中展示多個相對獨立的部分,利用add,show,hide進行fragment的添加,展示和隱藏。

 FragmentA fragmentA = FragmentA .newInstance(parameter);
                getSupportFragmentManager().beginTransaction()
                        .add(R.id.place_holder_view, fragmentA )
                        .show(goodsDetailFragment)
                        .commitAllowingStateLoss();
                        
 getSupportFragmentManager().beginTransaction().hide(fragmentA )
                        .add(R.id.place_holder_view, fragmentB )
                        .commitAllowingStateLoss();

.add(R.id.place_holder_view, fragmentB )可以顯示fragment,此時點擊手機的back鍵,會回調Activity的onBackPressed()函數,此時會直接關閉activity。
如果添加fragment時使用了 .addToBackStack(null),會將Fragment添加到回退棧中,有什麼作用呢?此時點擊back鍵,回調Activity的onBackPressed()函數會把當前展示的fragment彈出回退棧,展示前面添加的fragment。fragmentB.isAdded()顯示爲false,沒有被添加,所以此時無法調用show函數使fragmentB展示。

 FragmentA fragmentA = FragmentA .newInstance(parameter);
                getSupportFragmentManager().beginTransaction()
                        .add(R.id.place_holder_view, fragmentA )
                        .addToBackStack(null)
                        .show(goodsDetailFragment)
                        .commitAllowingStateLoss();

此時可以重寫onBackPressed()函數,自己用代碼hide,show相應的fragment。

//添加add之後,利用hide。show展示相應的已添加的fragment,此時不會重建fragment,只會走 onHiddenChanged(boolean hidden) 函數
 getSupportFragmentManager().beginTransaction().hide(fragmentA)
                        .show(fragmentB).commitAllowingStateLoss();

工作這兩三年用了太多的fragment,有時間會寫一下列表fragment配合viewpager 展示新聞信息的優化。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章