【问题标题】:Add other fragment to backstack?将其他片段添加到后台堆栈?
【发布时间】:2015-10-06 08:05:19
【问题描述】:

我的应用使用 5 个片段,如下所示:

[1]through[onClick on actionBar defined in activity]->[2]->[3]->[4]->[5]

每个片段都添加到后退堆栈中,因此我可以在按下后退按钮时返回。但是,我想在第 5 个片段上按下后退按钮时返回第一个片段,如下所示:

[1]<-[2]<-[3]<-[4]   [1]<-[5]

我试着这样做:

fragmentTransaction.addToBackStack("firstfragmenttag");

在第 4 个片段上添加第 5 个片段时,但当我按下后退按钮时,它仍然让我回到第 4 个片段而不是第 1 个片段!这是以编程方式执行此操作的简单方法吗?提前致谢。

【问题讨论】:

  • 知道了,我正在努力。顺便说一下,对我投反对票的那个人,请解释一下为什么......
  • @MuhammadBabar 很遗憾这不起作用
  • 你试过用POP_BACK_STACK_INCLUSIVE作为标志吗?
  • 是的。但也许我不清楚......它是在 Activity 中定义的操作栏(但除此之外,该活动完全是空的),它启动 F2。该活动仅启动包含我需要到达的第一个视图的片段 F1,但由于在操作栏上单击调用 F2,我猜 popbackstack 将永远找不到我需要到达的片段..

标签: android android-fragments fragment-backstack


【解决方案1】:

在您的情况下,您只需要在堆栈中添加第一个片段。

无需将其他人添加到堆栈中 这可以通过以下方式实现:

Fragment F1 = new <Fragment Name>();
fragmenttransaction.add(R.id.content,F1).commit();

对于 F2、F3、F4 和 F5 等其他用户 你可以使用

Fragment F2 = new <Fragment Name>();
fragmenttransaction.replace(R.id.content,F2).addToBackstack(null).commit();

然后你需要像下面这样覆盖 OnBackpressed [inside Activity]:

  @Override
public void onBackPressed() {
    if(getSupportFragmentManager().getBackStackEntryCount() >0) {
        getSupportFragmentManager().popBackStack();
    }
    else{
        super.onBackPressed();
    }
}

希望对您有所帮助!

【讨论】:

  • 我想我可以用这个。有没有办法知道调用来自哪个片段,我可以添加一些参数吗?我有其他片段访问第 5 个片段,在这种情况下,我需要保持正常行为。在这种情况下,只有第 4 个必须保留在 backstack 之外
  • 你的序列会一直像 [F1]->[F2]->[F3]->[F4]->[F5] 还是随机的?如果它按上述顺序从 F1 到 F5,您希望在将 F4 移出堆栈的同时将所有休息都留在堆栈中?我理解正确吗?
  • 我还有其他可以访问 [F5] 的片段。唯一的问题是,当我从 [F4] 访问 [F5] 时,我需要在用户按下后退按钮时继续 [F1],而不是在 [F4] 中。其余的一切都很好。
  • 那么在您的情况下,我认为您需要编写 if 和 else 来检查 F4 片段是否可见:if(F4.isVisible() &amp;&amp; !F5.isVisible()){'fragmenttransaction.replace(R.id.content,F5).addToBackstack(null).commit();} else{ //your normal way }
  • 我正在为此考虑一个捆绑参数,我会试试这个。但是如何指定片段 5 的回栈导致片段 1 而不是片段 4?
【解决方案2】:

您实际上可以在 onBackPressed 中获取 backstack 计数并检查 count ,如果是 5 则执行 popfrombackstack 4 次以返回 1 个片段

【讨论】:

  • 问题是我的片段也可以被其他人访问(不仅仅是 [4] )所以遗憾的是这个解决方案在我的情况下不起作用......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-07
相关资源
最近更新 更多