我有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>
答案 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使用相同类型的隐式关联,但它不是前所未有的。