当前位置: 首页 > 知识库问答 >
问题:

如何避免在后堆栈中出现多个片段实例?

令狐嘉禧
2023-03-14

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

其中所有片段实例都保存在后栈中。原因:避免内存溢出错误。

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

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

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

有什么想法吗?

共有1个答案

韩飞翮
2023-03-14

看一下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”,您可以这样做。。但是如果是这样的话,也许您应该在开始一个新片段之前无条件地弹出片段堆栈(即,根本没有后堆栈……)

 类似资料:
  • 嗨,伙计们,这是我的密码 我基本上只有2个碎片,只有家庭装饰应该添加到背面堆叠。在HomeFragment和OtherFragment之间切换了一段时间,然后在HomeFragment上单击back按钮,最后我会看到HomeFragment显示了好几次。在家庭框架内有一个回收视图。当我上下滚动时,我真的可以看到行显示了多次。我如何才能确保家庭装饰只添加到一次后堆栈。 谢谢

  • 我需要一些帮助。em以这种方式向活动添加片段。问题是每次调用openFragment时,它都会创建片段并添加。这是显而易见的。问:我做了什么修改,所以它只能添加一次片段。在下一次使用相同的片段标记调用时,它不会执行任何操作。 案例:第一次按下按钮添加片段并显示。我再按一次同样的按钮,它没有反应。

  • 我已经构造了一个NFA,我正在运行这个方法来评估机器,看看一个表达式是否有效。这适用于小的正则表达式,但是当我的正则表达式的大小以及NFA的大小变得太大时,这个搜索会向我抛出一个堆栈溢出。我很确定这是因为我已经实现了一个BFS,正在使用递归,并且可能没有很好地处理我的基本案例。 这个方法接受一个表达式和一个节点(从NFA的起始节点开始)。首先,它检查表达式的长度是否为零,如果我在接受节点(节点上的

  • 问题内容: 我在SO上发现了许多类似问题的实例,但不幸的是,没有答案符合我的要求。 我对人像和风景有不同的布局,并且我使用的是后向堆栈,这既妨碍了我的使用,又使我无法使用配置更改例程。 我在TextViews中向用户显示某些信息,这些信息不会保存在默认处理程序中。当仅使用“活动”编写我的应用程序时,以下方法运行良好: 使用,这仅在非常特殊的情况下有效。具体地说,令人震惊的是替换片段,将其放回堆栈中

  • Back Stack是否支持与Android中的嵌套片段交互? 如果是这样,我做错了什么?在我的实现中,后退按钮完全忽略了我将此事务添加到后堆栈的事实。我希望这不是因为嵌套片段的问题,只是我做了一些不正确的事情。 以下代码位于我的一个片段中,用于将新片段与当前显示的任何嵌套片段交换:

  • 我正在使用UI导航图。我有片段和。我的应用程序在片段上启动,以显示一些信息。然后,用户可以按下后退键,以结束。然后,用户通常从中选择一些内容,并以结束。 通常,我可以从堆栈中弹出并显示。但是,当应用程序刚刚启动时,后面的堆栈中没有。我想我可以手动将添加到backstack,但我想知道导航UI图是否允许我这样做。 我无法更改应用程序片段的顺序。这意味着我仍然需要首先显示。