片段不显示第二次使用

Fragment doesn't show second time it's used

我有一个单一的 Activity 架构,我在 MainActivity 中的另一个 ViewGroup 中加载一个 PreferenceFragmentCompatMainActivity 中存在自定义导航,因此您可以使用片段加载 ViewGroup 并在同一个 MainActivity.

中导航离开它

我第一次导航到 ViewGroup 时,PreferenceFragmentCompat 加载得非常好。但是,当我离开包含 PreferenceFragmentCompatViewGroup 然后再次返回时,PreferenceFragmentCompat 不会出现后续时间。 ViewGroup 确实如此,但是片段应该在的地方是空的。我可以通过 breakpoints/logging 看到片段正在经历它的生命周期——它只是不可见。

每次我导航回 ViewGroup 时都会创建一个新的包含 ViewGroup 和一个新的 PreferenceFragmentCompat 对象对,所以它不应该附加到旧的 ViewGroup。导航架构对于 post 来说太复杂了,但这是我每次在包含 ViewGroup class 中添加片段的方式:

CustomPreferenceFragment fragment = new CustomPreferenceFragment();
FragmentManager fm = activity.getSupportFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
ft.add(R.id.fragment_frame_container, fragment);
ft.commit();

有谁知道为什么片段可能没有出现?

我发现了问题。这比我预期的要简单得多。因为每次都会创建一个新的 ViewGroup,所以在旧的 ViewGroup 片段被新片段替换之前,片段被添加到旧的 ViewGroup 中,因为它们都包含 R.id.fragment_frame_container 视图。解决方案是,如果 ViewGroup 已经存在,就不要每次都创建它。