0

我有 5 个独特的 xml 页面,它们相当复杂。我想把 5 页放在 ViewPager 中。我能找到的所有示例都只是通过代码将相同的内容放在每个页面中。我想在 viewpager 中以声明方式定义 xml,就像下面粘贴的 xml 一样。但这不起作用 - 应用程序以这个 xml 停止。

如果我不能以声明方式定义它,那么我可以将单个 xml 页面加载到 viewpager 中吗?我找不到这样做的例子。谢谢,加里布莱克利

<?xml version="1.0" encoding="utf-8"?>

<fragment >
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <ImageView android:layout_width="match_parent"
        android:layout_height="match_parent" android:id="@+id/imageView1"
        android:src="@drawable/flashright" android:adjustViewBounds="true" android:scaleType="fitXY">
    </ImageView>
    </LinearLayout>       
</fragment>

<fragment >
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical" >
    <ImageView android:layout_width="match_parent"
        android:layout_height="match_parent" android:id="@+id/imageView1"
        android:src="@drawable/flashleft" android:adjustViewBounds="true" android:scaleType="fitXY">
    </ImageView>
    </LinearLayout>             
</fragment>                 

4

1 回答 1

0

如果我遵循,您希望在 XML 中声明所有内容,并避免在包含 ViewPager 的 Activity 中进行任何编程初始化。我能想到的唯一方法是定义 3 个不同的 Fragment 类,它们引用 3 个不同的 xml 布局。然后,您可以将它们嵌入到您上面的 xml 中,用 etc 替换每个<Fragment>元素<FragmentX> <FragmentY> <FragmentZ>。就个人而言,我宁愿编写 3 个 xml 布局并创建一个 Fragment 实现,该实现采用单个 int 参数来指定要加载的布局,然后执行少量使这样的解决方案起作用所必需的程序初始化。理由是重复的代码更少。

编辑:另一种可能更全面地满足您的要求的方法是用标签替换您<Fragment><Layout>标签并给它们 id。然后在您的活动代码中,将引用存储到它们,在 onCreate() 中将它们从视图中删除,最后将每个存储的引用添加到以编程方式创建的 Fragment 实例中,然后将其添加到 ViewPager。非常丑陋,但这是我所知道的在 XML 中以声明方式定义所有内容的唯一方法。您仍然会遇到这样的问题,即从 XML 中不清楚这些元素嵌套在 ViewPager 中,所以我个人不明白这一点。ListView 和 ListFragment 使用相同类型的隐式关联进行操作,但并非史无前例。

于 2012-08-17T00:25:39.180 回答