当前设置
+-> 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
。
有什么建议吗?
谢谢!
答案 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()
这样使用的角落案例。