Android addToBackStack不';不工作,关闭活动,而不是弹出片段

Android addToBackStack不';不工作,关闭活动,而不是弹出片段,android,android-fragments,android-activity,back-stack,Android,Android Fragments,Android Activity,Back Stack,我有个问题,到处都找不到解决办法 当我按下后退按钮时,我的应用程序不会返回到上一个片段,而是关闭活动 我有一个显示4个片段的活动:[1]、[2]、[3]、[4]。我可以使用操作栏在前3个片段之间切换,我不想将它们添加到后堆栈中 片段[4]是在片段[3]中选择的项目的详细视图。当我在[4]中按back时,我想返回到片段[3],而不是关闭应用程序 通过放置片段的活动以这种方式完成转换: private void replaceFragment(Fragment fragment, boolean t

我有个问题,到处都找不到解决办法

当我按下后退按钮时,我的应用程序不会返回到上一个片段,而是关闭活动

我有一个显示4个片段的活动:[1]、[2]、[3]、[4]。我可以使用操作栏在前3个片段之间切换,我不想将它们添加到后堆栈中

片段[4]是在片段[3]中选择的项目的详细视图。当我在[4]中按back时,我想返回到片段[3],而不是关闭应用程序

通过放置片段的活动以这种方式完成转换:

private void replaceFragment(Fragment fragment, boolean toBackStack){

    if(fragment != null){

        FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction();
        fragmentTransaction.replace(R.id.container, fragment);

        if(toBackStack)
            fragmentTransaction.addToBackStack(null);

        fragmentTransaction.commit();
    }
}
其中toBackStack始终为false,除非转换从[3]到[4]


如果我在每次转换中都传递toBackStack true,则活动仍将关闭。

我也遇到了同样的问题。具体地说,我正在实现一个PreferenceFragment,我希望back按钮将我返回到先前加载的片段所在的位置

“后堆栈”似乎不是通过系统后退按钮自动触发的。我的解决方案是手动将后堆栈从backpressed上弹出:

@Override
public void onBackPressed()
{
    if (inSettings)
    {
        backFromSettingsFragment();
        return;
    }
    super.onBackPressed();
}
每当我导航到我的首选项片段时,我都会在活动中将inSettings布尔值设置为true以保持该状态。下面是我的backFromSettingsFragment方法的外观:

private void backFromSettingsFragment()
{
    inSettings = false;
    getFragmentManager().popBackStack();
}
因此,如果您能够跟踪处于片段[4]中时的状态并截获后退按钮,那么您应该能够手动调用

getFragmentManager().popBackStack();
回到片段[3]


注意:请记住,您需要将片段[3]添加到后堆栈中,notFragment[4]。(除非[4]转到[5]并且您也需要返回到[4])

因此,如果(getFragmentManager().GetBackbackEntryCount()>0)getFragmentManager().popBackStack(),则最好在onBackPressed()中执行此操作,而不是在活动中保留状态;