一、概述
在一个Activity+多个Fragment的回退处理,一开始使用传统的add加hide,show进行判断切换,这样对于同级fragment用着挺不错的,比如导航栏类似的功能,多个层级的回退就需要添加判断很不实用,所以用到了addToBackStack,popBackStack来实现。还有就是自己定义一个list来管理fragment,这个可以参考文章。
hide和show的导航栏:
private void hideAllFragment(FragmentTransaction fTransaction)
{
if (detailFragment!=null)fTransaction.hide(detailFragment);
if (listFragment!=null)fTransaction.hide(listFragment);
if (searchFragment!=null)fTransaction.hide(searchFragment);
}
public void openDetailFragment(int fragment_type){
FragmentTransaction fTransaction = fManager.beginTransaction();
//首先隐藏清单fragment
hideAllFragment(fTransaction);
//再显示详细fragment
switch (fragment_type) {
case KTVType.FragmentType.ROOMDETAIL:
if (detailFragment == null){
detailFragment=new HistoryOderdetailFragment();
fTransaction.add(R.id.setting_content, detailFragment);
}
else
fTransaction.show(detailFragment);
break;
case KTVType.FragmentType.PRODUCTDETAIL:
...
}
fTransaction.commit();
}
二、回退栈使用
具体生命的周期分析可以参考文章,重写onBackPressed 用于back回退和toolbar的回退配合使用()
private void initFragment(){
fManager = getSupportFragmentManager();
FragmentTransaction fTransaction = fManager.beginTransaction();
settingFragment = new SettingFragment();
fTransaction.add(R.id.setting_content, settingF