【问题标题】:FragmentTransaction backPressed BackStack issueFragmentTransaction backPressed BackStack 问题
【发布时间】:2016-03-04 13:28:00
【问题描述】:

我有一个Activity,A、B、C、D四种片段

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

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

  3. 从 FRAGMENT 2 我将加载 fragA(FRAGMENT 3) 的新实例(不是旧实例),(此事务未添加到 backstack)(因此应该销毁 FRAGMENT 2)

  4. 现在我将按下返回按钮,这将转到 FRAGMENT 1(所以我认为 FRAGMENT 3 将被销毁)

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

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

  6. 现在我将按下返回按钮,

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

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

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

这是我在 onbackpressed 中的代码

  @Override
     public void onBackPressed() {

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

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

    }
}

【问题讨论】:

  • 是的,我曾经遇到过同样的问题。正如我在背压上记得的那样,您应该在添加或替换新的之前删除片段事务。交易.删除...
  • 这样行得通吗?还是不?
  • 你可能做错了地方。
  • 你能告诉我在哪里做,怎么做
  • 显示你加载新片段的代码

标签: android android-fragments fragment-backstack


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-07-13
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多