【问题标题】:How can I pop fragment from backstack without resuming it?如何从后台弹出片段而不恢复它?
【发布时间】:2011-11-03 13:48:33
【问题描述】:

如何在不恢复的情况下从后台弹出片段?我只想从后台堆栈中删除,我不想显示它。

【问题讨论】:

  • 您找到解决方案了吗?我注意到我的应用程序在后台堆栈中大约 140 个片段时崩溃,所以我想开始删除大约 100 个片段时最旧的片段,但还没有找到方法。

标签: android android-fragments


【解决方案1】:

这是架构问题。

1)假设我们有 2 个控制器(片段/活动):控制器 A 和控制器 B。 它们都连接到某个模型的一个实例(您可以在 Application-heir 类中使用与服务、单例模式或初始化模型的绑定,并为其创建一个 getter)。 当控制器 B 中发生有趣的事情时,他会通知模型,然后模型调用 controllerA.finish()/controllerA.remove()。 当然,我总是尝试尽可能好地实现这个解决方案,但有一个主要思想。

2)在另一种情况下,我在 startActivity(intent) 之后立即调用 finish();

3)我也可以写:startActivityForResult(intent, requestCode) 并在完成第二个活动方法 onActivityResult(requestCode, responseCode, intent) 后调用 - 如果 requestCode 相等,我完成活动。

【讨论】:

  • 片段没有完成方法。
  • 能否在 onResume() 或 onStart() 中插入简单的检查 - 如果需要删除?
【解决方案2】:

如果您不使用 FragmentTransaction 的方法
public abstract FragmentTransaction addToBackStack (String name)
将其添加到后台堆栈。不需要删除它。

【讨论】:

  • 我需要从后栈中移除特定的片段。 popBackStack 不起作用,因为它恢复指定的片段。
  • popBackStack 中使用了哪些标志。尝试使用 POP_BACK_STACK_INCLUSIVE。
  • 是的,我用过这个标志。回栈入口的 OnResume 仍然被调用。
猜你喜欢
  • 2013-02-04
  • 1970-01-01
  • 2011-12-16
  • 2012-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-21
  • 1970-01-01
相关资源
最近更新 更多