【问题标题】:Delete Fragment from backstack and show actvity从 backstack 中删除 Fragment 并显示活动
【发布时间】:2018-11-20 23:50:16
【问题描述】:

我有一个activity,三个fragment,这就是生命周期:

  1. 打开应用(加载活动)
  2. 按下按钮(加载片段 A)
  3. 按另一个按钮(加载片段 B)

活动 -> 片段 A -> 片段 B

我想要的是,如果我按下 Fragment B 中的后退按钮,它会向我显示 Activity

我该怎么做?

现在,如果我按下后退按钮,它会显示 Fragment A

编辑: 这就是我称之为片段 B 的方式

 public void changeFragment(Fragment fragment, boolean addToBackStack) {

    if (fragment != null) {
        FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
        ft.addToBackStack(null);
        ft.replace(R.id.content_frame, fragment);
        ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
        ft.commit();
    }

【问题讨论】:

  • 不需要您的 addToBackStack 布尔值,因为它没有被使用。
  • 我知道。但这不是问题,即使使用此代码,当我按下后退按钮 @miguelarc 时,Fragment A 仍然显示
  • 此函数是否替换了您在活动中调用片段 A 时使用的同一 ID?
  • 您有更多关于片段交易的信息here。检查片段替换部分
  • 是的,正在替换相同的 id。 @miguelarc

标签: android android-fragments android-activity


【解决方案1】:

您正在将片段 B 添加到片段 A 的顶部,使用 FragmentTransaction 中的 add()。如果您改用replace(),片段A 将被片段B 替换,而不是将其添加到后台堆栈中,这样当您在片段B 中按回时,将显示活动而不是片段A。检查this有关如何替换片段的更多详细信息。

【讨论】:

  • 你能帮我解决另一个问题吗? link
【解决方案2】:

一段时间后,我的解决方案是在活动中使用 onBackPressed:

@Override
public void onBackPressed() {

    FragmentManager fm = this.getSupportFragmentManager();
    if (getSupportFragmentManager().getBackStackEntryCount() > 0 ){
        for(int i = 0; i < fm.getBackStackEntryCount(); ++i) {
            fm.popBackStack();
        }
    } else {
        super.onBackPressed();
    }


}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多