Android 碎片内部碎片

Android 碎片内部碎片,android,android-fragments,android-viewpager,fragmentpageradapter,android-nested-fragment,Android,Android Fragments,Android Viewpager,Fragmentpageradapter,Android Nested Fragment,我在实现基于多个ViewPager的设计时遇到了一些问题 在较高的层次上,我有一个片段活动,它的内容只有一个框架布局。我有3个不同的片段要显示。所有3个都是全屏的,一次只使用1个 片段1是一个基本片段,包含一些TextView和ImageView。 片段2有一个ViewPager和一个FragmentPagerAdapter,为它提供几个简单片段。 片段3有一个ViewPager和一个FragmentPagerAdapter,为它提供几个简单片段(与片段2不同) 在FragmentActivit

我在实现基于多个ViewPager的设计时遇到了一些问题

在较高的层次上,我有一个片段活动,它的内容只有一个框架布局。我有3个不同的片段要显示。所有3个都是全屏的,一次只使用1个

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

在FragmentActivity onCreate()中,我获取FragmentManager并开始一个事务,用Fragment2的新实例替换FrameLayout中的任何内容

在这一点上,一切都按预期进行。片段2中我的ViewPager工作得非常好

现在我有了一个菜单选项,它用片段3的一个新实例替换了FrameLayout中的片段2。这也很好

当我试图用另一个替换事务将片段2放回FrameLayout时,问题就出现了。我在顶部看到我的页面指示器,但我的页面是空白的

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

供参考 我的第一个设计只是一个带有ViewPager和ViewIndicator的片段活动。我只有上面描述的片段2和片段3,还有一个菜单选项可以在它们之间切换。为了切换,我定义了2个不同的FragmentPagerAdapter,只调用ViewPager.setAdapter来设置所选FragmentPagerAdapter。这是完美的工作,但现在我需要一个新的顶级片段,它根本不使用ViewPager。这就是为什么我决定将我的viewpager移动到它们自己的片段中。我的想法是,我只需将片段交换到框架布局中

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

brockoli你不能用“好方法”。但对我来说,它起作用了

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


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

此问题可能与第二个布局重复


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

在片段中使用片段时,我遇到了适配器问题。我不确定它是否与您使用的相同,但请尝试将对setAdapter的调用置于可运行状态。请看这里:使用FragmentStatePagerAdapter而不是FragmentPagerAdapter为我解决了问题:)您好,我也使用FragmentStatePagerAdapter解决了这个问题。但后来我注意到这些片段并没有从记忆中移除?它们只是不断添加,可能会导致内存泄漏。有办法解决这个问题吗?@JohnErnestGuadalupe你怎么知道这个片段还在记忆中?