弹出后栈后,我的碎片没有被回收吗?他们的onStop()
方法被调用,但他们的onDestroyView()
或onDestroy()
方法却不被调用。
如何确保调用其onDestory()
方法?
我犯了一个使“上帝活动”的错误,我的所有片段.replace()
都放在一个容器FrameLayout
中。假设我有四个片段,分别是FragA
,FragB
,FragC
和FragD
,其后栈看起来像这样:FragA
-> FragB
-> FragC
-> FragD
FragD is the only visible fragment. Then, I call .
popBackstack()`FragA
-> FragB
-> FragC
=!= FragD
FragD
已被分离,并且FragC
现在对用户可见。尝试实例化新的FragD
(从FragC
)时,它已创建,并且我的堆上有两个FragD
实例。并且第一个FragD
实例的onDestroyView()
不被调用。
我该如何解决?
编辑:这是我如何即时替换UI中的片段的示例:
getSupportFragmentManager().beginTransaction()
.replace(R.id.container, new SearchScreenFragment())
.addToBackStack(null)
.commit();
EDIT2:
onDetach()
也没有被调用。 最佳答案
我应该一直使用这个:getChildFragmentManager()
:
来自https://stackoverflow.com/a/23500935/891242
关于android - 弹出后栈后,我的Fragments没有被垃圾回收,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29592358/