Android 片段简单的后台堆栈

Android fragment simple backstack

我有一个 activity 包含一个容器,该容器将接收 2 个碎片。 一旦 activity 初始化,我开始第一个片段:

showFragment(new FragmentA());

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

然后当用户点击 FragmentA 时,我在 Activity 级别收到此点击,我调用:

showFragment(new FragmentB());

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

有很多与 Fragments 和 backstack 相关的帖子,但我找不到一个简单的解决方案。我想避免我必须检查我是否正在对片段 A 或片段 B 进行后退的情况,因为我可能会扩展片段的数量并且我将需要维护该方法。

addToBackStack(fragment.getTag())

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

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

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

并且当您希望 activity 在某些片段数上关闭时,您也可以在 activity onBackPressed() 中直接调用 finish()

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

现在你可以做的是在onBackPressed()中调用下面的方法,你的问题就解决了

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

不要在 ONBackPRESSED() 中调用 SUPER;

直接调用上面的方法即可!