Android片段简单的backstack

时间:2016-11-24 11:11:20

标签: android android-fragments fragment-backstack fragmentmanager

我有一个活动包含一个容器,它将接收2个片段。 一旦活动初始化,我就开始第一个片段:

showFragment(new FragmentA());

private void showFragment(Fragment fragment) {
    getSupportFragmentManager().beginTransaction()
            .replace(R.id.container, fragment, fragment.getTag())
            .addToBackStack(fragment.getTag())
            .commit();
}

然后,当用户点击FragmentA时,我会在活动级别上收到此点击,然后我致电:

showFragment(new FragmentB());

现在,当我按下后退按钮时,它返回到片段A(这是正确的),当我再次按下后退按钮时,它显示空屏幕(但保持相同的活动)。我希望它只关闭应用程序(因为活动没有父项)。

有许多与Fragments和backstack相关的帖子,但我找不到一个简单的解决方案。我想避免这种情况,我必须检查我是否在片段A或片段B上按下,因为我可能会扩展片段的数量,我将需要维护该方法。

3 个答案:

答案 0 :(得分:0)

addToBackStack(fragment.getTag())

仅用于片段B,不用于片段A

答案 1 :(得分:0)

我认为您的片段A没有正确弹出,尝试使用添加片段而不是替换以获得正确的后退导航,但是您可以使用以下方法检查后台堆栈的数量:

FragmentManager fragmentManager = getSupportFragmentManager();
int count = fragmentManager.getBackStackEntryCount();

如果您希望自己的活动在某些片段数量上关闭,您也可以直接致电活动finish()中的onBackPressed()

答案 2 :(得分:0)

您收到空白屏幕,因为当您添加第一个片段时,您将calling addToBackStack(),因为您在不知不觉中添加了空白屏幕!

现在您可以在onBackPressed()中调用以下方法,您的问题将得到解决

  public void moveBack()
    {
//FM=fragment manager
        if (FM != null && FM.getBackStackEntryCount() > 1)
         {
           FM.popBackStack();
         }else {
           finish();
         }
    }

请勿在ONBACKPRESSED();

中调用超级

只需调用上面的方法!