1

我有一个 Activity 和四种类型的片段 A、B、C、D

  1. 首先,我将在 HomeActivity 中展示 fragA 的一个实例 - (FRAGMENT 1)

  2. 从 FRAGMENT1 我将加载一个 fragB(FRAGMENT 2)(_this transaction added to backstack)的实例

  3. 从片段 2 我将加载 fragA 的新实例(片段 3)(不是旧的),(此事务未添加到后台堆栈)(所以片段 2 应该被销毁)

  4. 现在我将按下后退按钮,这将转到 FRAGMENT 1(所以 FRAGMENT 3 将按照我的想法被销毁)

    并加载来自 backstack 的 fragment1。在这一点上,我们可以假设现在 backstack 中没有片段。(这意味着如果我点击返回它会关闭应用程序)

  5. 现在从这个 FRAGMENT 1,我将转到 FRAGMENT 4(fragC 的实例),(这个事务我将添加到 backstack)。

  6. 现在我将按下 BackButton,

  7. 现在理论上,它应该加载 FRAGMENT 1(fragA 的实例)。但片段 3(fragA 的实例)正在加载。

(我想知道 FRAGMENT3 是怎么出现的,它被删除了,没有添加到 backstack 中)。

如果我走得更远,其他类似的问题就会出现

这是我在 onbackpressed 中的代码

  @Override
     public void onBackPressed() {

    if(getSupportFragmentManager().getBackStackEntryCount() > 1){

        getSupportFragmentManager().popBackStackImmediate();
    }else {
        super.onBackPressed();

    }
}
4

1 回答 1

0

popBackStackImmediately()我认为您不需要调用onBackPressed. 它总是对我有用,而无需手动弹出 BackStack。(例如,我做的一件事onBackPressed()是确保 NavigationDrawer 已关闭)。

因此,您可能会弹出两次回栈:一次是自动完成,一次是通过调用来触发它popBackStackImmediately()。这可能会在切换片段时导致一些问题和意外行为。

于 2016-03-26T12:55:57.400 回答