在ViewPager中声明性地定义片段

时间:2012-08-17 00:03:31

标签: android android-viewpager

我有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>                 

1 个答案:

答案 0 :(得分:0)

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

编辑: 另一种可能更能完全满足您要求的方法是将<Fragment>代码替换为<Layout>代码并为其提供ID。然后在您的Activity代码中,将refs存储到它们中,从onCreate()中的View中删除它们,最后将每个存储的引用添加到以编程方式创建的Fragment实例中,然后将其添加到ViewPager中。非常难看,但这是我所知道的唯一方式,以声明方式定义XML中的所有内容。你仍然会遇到这样的问题,即从XML中不清楚这些元素是否嵌套在ViewPager中,所以我个人认为这一点并不重要。 ListView和ListFragment使用相同类型的隐式关联,但它不是前所未有的。