添加带有标签的片段是否会导致它们的父节点被销毁时不被销毁?

时间:2017-03-22 07:31:39

标签: android android-fragments

我有一个Android应用程序,它使用一个活动和一些片段来动态构建一个ui

基本活动中有一个简单的LinearLayout,它没有任何东西(BaseActivity)

我添加了一个片段,它只包含一个带有操作栏的抽屉布局,一个framelayout和一个导航栏(BaseFragment)

为此,我添加了两个片段中的一个,一个显示所有子列表(SerialFragment),另一个显示向导样式(WizardFragment)

每个都可以添加一个(如果是向导)或许多(如果是列表)片段(QuestionFragment)

当我离开BaseActivity时,会调用BaseFragment的onDestroy(),但不会调用任何子片段的onDestroy()

我像这样添加子片段

FragmentTransaction trans = parent.getFragmentManager().beginTransaction();
set_default_animation(trans); //this just adds a custom animation
trans.replace(R.id.wizard_content, QuestionFragment.NewInstance(),question_id.toString()); //in case of a wizard
trans.add(R.id.list_content,QuestionFragment.NewInstance(), question_id.toString());//in case of a list
trans.commit();

BaseFragment(被破坏)和其他的唯一区别在于,在其他人中我添加了一个标签(section_id或question_id),以便我可以使用findFragmentByTag检索它们。

然而,当用户离开活动时,只会调用BaseFragment的onDestroy()。

原因是,该片段是我唯一没有使用标签添加的片段吗?

请注意,我没有使用支持片段管理器,这是正常的,所以我使用标签来找到我想要的片段,因为非支持片段管理器不包含getFragments()。

另请注意,我没有在上面提到的任何片段

上将retain instance标志设置为true

我可以通过删除标签并在父节点上添加对片段的引用来测试上面的内容,但这意味着很多重构,如果不是问题我想避免重构。

提前感谢您提供的任何帮助

1 个答案:

答案 0 :(得分:0)

重构所有内容之后,似乎标签不是问题(尽管我仍然删除了它们)

为我修复的是使用getChildFragmentManager()而不是getFragmentManager()来更新gui

这样,当基本视图被破坏时,其子项将被删除

希望它有助于某人