在 ViewPager 片段中膨胀片段

Inflating fragments inside ViewPager fragment

我有一个 ViewPager,它由许多页面组成,具体取决于来自服务器的 JSON 响应。该设计要求 ViewPager 的每个页面都包含自己的选项卡。在 ViewPager 中嵌套 ViewPager 似乎不是一个好主意,因此我在各个页面中使用了 ViewSwitcher(我最多只需要两个视图)。

 <ViewSwitcher
    android:id="@+id/VS_ContentFrame"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <FrameLayout
        android:id="@+id/FL_1"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
    <FrameLayout
        android:id="@+id/FL_2"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</ViewSwitcher>

ViewPager内部各个页面的布局如上所示。我现在要做的就是用显示每个选项卡内容的新片段替换此片段中的每个 FrameLayout。

问题是,当我用 Fragment 替换特定的 FrameLayout 时,它会混淆要替换哪个 FrameLayout。我观察到的是 ViewPager 中只有一页始终包含内容。所有其他页面都是空的。我该如何解决这个问题?

我现在实施的一个解决方案是获取每个片段内的 FrameLayout 并通过调用

动态设置其视图 ID
View.GenerateViewId()

这样,每个 FrameLayout 的视图 ID 都是唯一的,并且 Fragment 可以正确替换,没有任何问题。如果有更好的方法,欢迎提出建议。

如果您要为每个 ViewPager 页面生成一个托管片段,然后将您在问题中包含的布局应用于每个片段,那么您应该能够使用子片段管理器实现您的目标.请参阅 Fragment.getChildFragmentManager()(我确定也有支持版本):

Return a private FragmentManager for placing and managing Fragments inside of this Fragment.

FragmentManager 的受限范围将允许它唯一标识正确的 FrameLayout,即使您的 ViewPager 本身包含多个具有相同 ID 的 FrameLayout。