弹出后台堆后,我的碎片不会被垃圾收集

时间:2015-04-12 17:30:10

标签: android android-fragments back-stack

弹出后备箱后,我的碎片没有被垃圾收集?他们调用了onStop()方法,但没有调用onDestroyView()onDestroy()方法。

如何确保调用onDestory()方法?

我错误地制作了“上帝活动”,而我的所有碎片.replace()都是一个容器FrameLayout。假设我有四个片段,FragAFragBFragCFragD,后面的堆栈看起来像这样:

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()也没有被调用。

1 个答案:

答案 0 :(得分:2)

我应该一直在使用它:getChildFragmentManager()

来自https://stackoverflow.com/a/23500935/891242