【问题标题】:How to avoid multiple instances of a fragment in back stack?如何避免后堆栈中的片段的多个实例?
【发布时间】:2013-08-05 05:31:44
【问题描述】:

我想在这个导航用例中避免这种情况:A -> B -> A -> B -> A -> B ...

所有片段实例都保存在后堆栈中。原因:避免内存不足错误。

我尝试创建一个自己的导航工作流程,如下所述:https://stackoverflow.com/questions/18041583/fragments-backstack-issue?noredirect=1#comment26393904_18041583(它应该模仿活动行为,在开始一个新的之后总是调用完成(),同时只让第一个(家)在导航堆栈)。 但这似乎是非常错误或无法理解的。

所以我也想实现一个行为,比如“带到前面”标志的活动。但我不知道该怎么做。也许与 popBackStack 有关-但我不知道如果事务已经在后台堆栈中,如何询问片段。而且我不知道我是否走在正确的道路上。

这应该是一个相当标准的任务,因为每个导航菜单基本上都有这个问题。但是,似乎没有直接实施,也找不到有关它的信息。

有什么想法吗?

【问题讨论】:

标签: android android-fragments


【解决方案1】:

看看 FragmentManager 后台堆栈。它具有查看/弹出片段后台堆栈中的条目的功能。您可能需要以下逻辑:如果用户请求位于堆栈顶部的片段(前一个片段),则退出该片段(返回),否则开始一个新片段。

这会产生:

A (user asks for B)
A->B (user asks for A again)
A

..但不会阻止

A (user asks for B)
A->B (user asks for C)
A->B->C (user asks for A)
A->B->C->A

这需要将堆栈从“C”倒回到“A”,您可以这样做.. 但如果是这种情况,也许您应该在开始新片段之前无条件弹出片段堆栈(IE No完全返回堆栈..)

【讨论】:

  • 好吧,关于你的最后一句话,这就是我之前尝试过的(链接在我的帖子中),但这很麻烦/不起作用。现在我只是重新启用了默认的堆栈行为——它会添加用户导航到的尽可能多的实例。但我会花更多时间来讨论这个问题......
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-17
  • 1970-01-01
  • 2016-01-05
  • 2012-09-23
  • 2010-11-30
  • 2011-11-23
相关资源
最近更新 更多