【发布时间】:2015-09-23 12:04:28
【问题描述】:
我有一个带有 ViewPager 的 TabLayout。 ViewPager 有四个片段 F1、F2、F3 和 F4。 F1 包含一个 FrameLayout,它可以有 2 个片段 F11 和 F12。最初我用下面的代码在 FrameLayout 中添加 F11。
Fragment11 fragment11 = new Fragment11();
fragment11.setArguments(getActivity().getIntent().getExtras());
getActivity().getSupportFragmentManager().beginTransaction()
.add(R.id.fragment_container, fragment11, Constants.FRAGMENT_11)
.commit();
F11 包含一个 ListView。当我单击此 ListView 中的任何项目/行时,F11 将替换为 F12。 F12 是一个细节片段。
Fragment12 fragment12 = new Fragment12();
FragmentTransaction fragmentTransaction = getActivity().getSupportFragmentManager().beginTransaction();
fragmentTransaction.replace(R.id.fragment_container, fragment12, Constants.FRAGMENT_12)
.addToBackStack(null)
.commit();
对于正常的应用程序流程,它可以正常工作。现在假设目前我在 Fragment12 中并且我按下了主页按钮。现在我打开任何繁重的应用程序(相机或任何其他应用程序)以从内存中删除我的应用程序。现在我再次启动了我的应用程序。
现在有两个 Fragment11 和一个 Fragment12 是同时可见的。当我按下后 Fragment12 被删除,现在两个 Fragment11 是可见的。当我单击 Fragment11 的 ListView 行时,顶部的 Fragment11 将替换为 Fragment12,但是底部的 Fragment11 仍然存在。
这就是我想要的: 当应用程序从后台进入前台时,Fragment12 应该是可见的,当我按下返回时,Fragment12 应该会弹出以显示 Fragment11。
我该怎么做?
【问题讨论】:
-
在添加这两个嵌套片段时,您可能需要使用正确的 FragmentManager getChildFragmentManager()。
-
@Luksprog 如果我改用 getChildFragmentManager(),我找不到 R.id.fragment_container。它的例外。 java.lang.IllegalArgumentException:找不到片段 Fragment12 的 id 0x7f0e014c (com.demo:id/fragment_container) 的视图
-
如果这些片段在另一个片段的布局中使用,那么您需要使用 getChildFragmentManager()。如果您收到该错误,则说明您的代码/布局有问题。您没有发布太多代码,但另一个问题是在将 F11 和 F12 添加到布局之前,您是否在 getChildFragmentManager() 中有可用的 检查(或者您盲目地添加这些使用当前代码构造父实例时的片段)?
标签: android listview android-fragments