10

我在实现基于多个 ViewPagers 的设计时遇到了一些麻烦。

在高层次上,我有一个 FragmentActivity,它的内容只有一个 FrameLayout。我有 3 个不同的片段要显示。所有 3 个都是全屏的,一次只能使用 1 个。

片段 1 是带有一些 TextView 和 ImageView 的基本片段。Fragment 2 有一个 ViewPager 和一个 FragmentPagerAdapter,它为它提供了几个简单的片段。Fragment 3 有一个 ViewPager 和一个 FragmentPagerAdapter 为它提供几个简单的 Fragment(与 Fragment 2 不同)

在我的 FragmentActivity onCreate() 中,我得到了 FragmentManager 并开始一个事务,用 Fragment 2 的新实例替换我的 FrameLayout 中的任何内容。

此时一切都按预期工作。我在 Fragment 2 中的 ViewPager 运行良好。

现在我有一个菜单选项,可以用 Fragment 3 的新实例替换 FrameLayout 中的 Fragment 2。这也可以正常工作。

当我尝试使用另一个替换事务将 Fragment 2 放回 FrameLayout 时,就会出现问题。我在顶部看到我的 PagerIndicer,但我的页面是空白的。

我尝试创建我的 Fragment 2 的新实例并调用替换事务。我还尝试在我调用替换时在我的片段上设置一个标签,并在我的替换之前添加一个 findFragmentByTag 检查,而不是创建一个新实例。在我第二次替换后,两者都给了我相同的空白页结果。

供参考 我的第一个设计只是一个带有 ViewPager 和 ViewIndicer 的 FragmentActivity。我上面的描述中只有 Fragment 2 和 Fragment 3 以及在它们之间切换的菜单选项。要切换,我定义了 2 个不同的 FragmentPagerAdapter,并调用 ViewPager.setAdapter 来设置选定的 FragmentPagerAdapter。这工作得很好,但现在我需要一个根本不使用 ViewPager 的新顶级片段。这就是为什么我决定将我的 ViewPager 移到它们自己的 Fragment 中。我的想法是我只需将我的片段交换到 FrameLayout。

我现在没有我的代码,所以我不能发布任何代码,但我明天会在我的问题中添加一些代码以帮助获得答案。

4

2 回答 2

15

这个问题可能是Navigating back to FragmentPagerAdapter -> fragment are empty的重复。

如果您的应用可以处理它(API 17),请使用getChildFragmentManager()。使用 Fragment 托管 ViewPager 并使用 FragmentPagerAdapter 时似乎会出现此问题。更改为 FragmentStatePagerAdapter 似乎也可以解决问题,但我仍然认为使用 getChildFragmentManager() 是最明智的做法。

于 2013-09-26T20:43:06.143 回答
0

brockoli 你可以用不是“好方法”。但对我来说它有效。

您可以在视图 2 布局中使用,您可以在其中绑定片段。首先 - 对于带有片段的片段。第二 - 对于其他片段。

在用片段替换片段时不会替换,而只会将可见性第一个布局更改为消失并将新片段添加到第二个布局。在背面,从第二个布局中删除片段并将第一个布局的可见性设置为可见。

于 2012-12-17T21:22:27.843 回答