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 展示新聞信息的優化。