【问题标题】:Inflating fragments inside ViewPager fragment在 ViewPager 片段中膨胀片段
【发布时间】:2015-09-10 21:10:32
【问题描述】:

我有一个 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。

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

【问题讨论】:

  • 你在哪里创建和提交片段交易?
  • 在作为 ViewPager 的一部分生成的 Fragment 内部。我已经找到了一个解决方案(我已经在下面发布了)。不确定这是否是最好的方法。

标签: android android-layout android-fragments android-viewpager


【解决方案1】:

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

返回一个私有的 FragmentManager 用于在这个 Fragment 中放置和管理 Fragment。

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

【讨论】:

  • 哇!谢谢,我不知道这个。这绝对是更好的答案。
【解决方案2】:

我现在实现的一个解决方案是在每个片段中获取 FrameLayout 并通过调用动态设置其 View ID

View.GenerateViewId()

这样,每个 FrameLayout 的视图 ID 都是唯一的,并且片段可以正确替换而不会出现任何问题。如果有更好的方法可以接受建议。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-02
    • 2017-12-18
    • 1970-01-01
    • 1970-01-01
    • 2014-03-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多