5

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

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

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

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

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

任何想法?

4

1 回答 1

0

看一下 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 back stack at全部..)

于 2013-08-04T13:22:26.757 回答