繁体   English   中英

addToBackStack不起作用,关闭活动而不是弹出片段

[英]addToBackStack doesn't work, closes the activity instead of popping back fragments

我有一个问题,我无法在任何地方找到解决方案。

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

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

片段[4]是片段[3]中选择的项目的详细视图。 当我按下[4]时,我想返回片段[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();
    }
}

除非转换是从[3]到[4],否则toBackStack始终为false。

如果我在每次转换中都将toBackStack传递给true,那么活动无论如何都会关闭。

我有同样的问题。 具体来说,我正在实现一个PreferenceFragment,我想让后退按钮将我返回到以前加载的片段。

似乎“后栈”是系统后退按钮不会自动触发的内容。 我的解决方案是从onBackPressed覆盖手动弹出后台堆栈:

@Override
public void onBackPressed()
{
    if (inSettings)
    {
        backFromSettingsFragment();
        return;
    }
    super.onBackPressed();
}

每当我导航到我的首选项片段时,我都会在活动中将inSettings boolean设置为true以保留该状态。 这是我的backFromSettingsFragment方法的样子:

private void backFromSettingsFragment()
{
    inSettings = false;
    getFragmentManager().popBackStack();
}

因此,如果您能够跟踪Fragment [4]中的状态并截取后退按钮,您应该能够手动调用

getFragmentManager().popBackStack();

回到Fragment [3]。

注意:记住你需要将Fragment [3]添加到后栈, 而不是片段[4]。 (除非[4]进入[5],你也需要回到[4]。)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM