【问题标题】:Fragment is not replacing properly after adding it to backstack将片段添加到后台堆栈后,片段无法正确替换
【发布时间】:2015-06-05 20:32:29
【问题描述】:

我的活动中有 5 个片段。 片段 A 是默认片段。

所有片段中都有滑动菜单可以切换其他4个片段。 所以我只想将 Fragment A 添加到 backstack .. 所以 从 A 调用 Fragment B/C/D/E 时,A 会被添加到 backstack 中。

现在从片段 B 中说,我正在从菜单抽屉中选择片段 C。无需将其添加到后台堆栈。现在按下后退按钮,我可以看到我的默认片段是正确的。但是当我再次尝试从 A 更改任何片段 B/C/D/E 时,片段 A 仍然可见。

fA->add to backstack->fB->fC->Back button->fA->add to backstack...->fB...但是片段A在这里仍然可见。 有什么解决办法吗?

这是我的代码:

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
    transaction.replace(R.id.flContainer, fragment, fragment.getClass().getSimpleName());

    if (isAdd) {

        transaction.addToBackStack(fragment.getClass().getSimpleName());
    }
    transaction.commit();
    drawerLayout.closeDrawer(Gravity.RIGHT);

【问题讨论】:

  • 需要为不同片段类的每个父布局应用背景色。
  • @PiyushGupta 您是否建议透支应用程序?这是一个性能问题。永远不要那样做。
  • 我不是告诉他画应用程序。只需设置背景颜色!
  • 如果您设置背景颜色,您将透支应用程序。我认为您不知道android上的透支是什么。查看我的博客:androidshenanigans.blogspot.pt/2015/03/…
  • 仍然有问题。在为每个片段布局设置背景颜色之后。

标签: android fragment fragmenttransaction


【解决方案1】:

这样做

if (fragment != null) {

        FragmentManager fragmentManager = getSupportFragmentManager();
        fragmentManager.beginTransaction()
                .addToBackStack(fragment.getClass().getSimpleName())
                .replace(R.id.frame_container, fragment).commit();

        mDrawerLayout.closeDrawer(mDrawerList);
    } else {
        // error in creating fragment
        Log.e("MainActivity", "Error in creating fragment");
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-30
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    相关资源
    最近更新 更多