如何在Android中正确弹出片段?

时间:2016-08-23 18:10:22

标签: android android-fragments

当前设置

+-> Activity1
|     -> FragmentA 
|     -> FragmentB   -+
|                     |
+- Activity2  <-------+

因此Activity1打开FragmentA,FragmentB打开Activity2。 然后当Activity2完成时,它会返回到Activity1(没有OnCreate。只有OnActivityResult)。

当我转到Activity2时,我想杀死FragmentA和FragmentB,但是当我这样做时,它们弹出得太快,所以我可以看到我的Activity1在Activity2出现之前分秒运行。

--- 我尝试了什么 ---

我试图用Activity2杀死碎片,但是现在它太慢了,所以当我从Activity2回到1时,我可以看到碎片挥之不去。

目前只有工作解决方案将清算方法放入postDelayed处理程序,但我不喜欢这个解决方案,因为你永远不知道延迟多少

---为什么不从Activity2中删除它? ---

我试了一下希望,但是fragmentManager不允许我在不同的Activity中弹出backstack,因此抛出java.lang.IllegalStateException: Can not perform this action after onSaveInstanceState

有什么建议吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

我通过在Activity1a

下移动这些片段来解决它

现在它看起来像这样

+-> Activity1  --------+ 
|                      |
|   Activity1a  <------+
|   |   -> FragmentA
|   |   -> FragmentB
|   +-----------------------+
|                           |
+-- Activity2  <------------+

Activity1a现在是一个隐藏在FragmentA和B上的不可见活动。当我想要转换到Activity2时,现在我只需要来自Activity1a的finish(),那么附加到Activity1a的所有片段都将消失。

来自Android官方文档:https://developer.android.com/guide/components/fragments.html

  

片段必须始终嵌入到活动中,片段的生命周期直接受到主机活动生命周期的影响。例如,当活动暂停时,其中的所有片段也会暂停,当活动被销毁时,所有片段也都会被破坏。

这解决了这个问题。我只需要处理像onBackPressed()这样使用的角落案例。