[英]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.