如何选择必须在后台显示哪个片段

时间:2014-02-25 01:45:22

标签: android android-fragments back

当我使用withBackPressed片段时,我正在尝试解决问题:

如果以这种方式添加片段:

public void showFragment(Fragment new_fragment,String tag,boolean back){
    FragmentManager fm = getSupportFragmentManager();
    Fragment fragment = fm.findFragmentByTag(tag);
    fragment = fragment==null?new_fragment:fragment;
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.replace(R.id.fragment_container, fragment);
    if(back)transaction.addToBackStack(tag);
    transaction.commit();
}

@Override
public void onBackPressed() {
   FragmentManager fm = getSupportFragmentManager();
   FragmentTransaction ft = fm.beginTransaction();
   if (fm.getBackStackEntryCount() > 0) {
            fm.popBackStack();
   }else {
        moveTaskToBack(true);
   }
}

当我使用popBackStack时,片段会重叠。为什么呢?

如何正确删除或避免存储我不需要的backstack片段(例如SplashScreenFragment)?

谢谢!

1 个答案:

答案 0 :(得分:1)

你的showFragment()函数有一个参数(boolean back),可以将它从堆栈中排除。

您还可以使用弹出给定标识符(http://developer.android.com/reference/android/app/FragmentManager.html)的其他popBackStack()方法签名之一

或者您可以使用NavUtils和清单定义来定义关系。