弹出后栈后,我的碎片没有被回收吗?他们的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()也没有被调用。

最佳答案

我应该一直使用这个:getChildFragmentManager()

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

关于android - 弹出后栈后,我的Fragments没有被垃圾回收,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/29592358/

10-09 19:13