0

かなり複雑な xml の 5 つの固有のページがあります。ViewPager 内に 5 ページを配置したいと考えています。私が見つけることができるすべてのサンプルは、コードを介して各ページに同じコンテンツを配置するだけです。以下に貼り付けたxmlのように、viewpagerでxmlを宣言的に定義したいと思います。しかし、これは機能しません。アプリはこの xml で停止します。

宣言的に定義できない場合、個々の xml ページをビューページャーにロードできますか? これを行う例は見つかりません。ありがとう、ゲイリー・ブレイクリー

<?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 を含むアクティビティ内からのプログラムによる初期化を避ける必要があります。これを行う唯一の方法は、3 つの異なる xml レイアウトを参照する 3 つの異なる Fragment クラスを定義することです。<Fragment>次に、それらを上記の xml に埋め込み、各要素をetcに置き換えることができます<FragmentX> <FragmentY> <FragmentZ>。個人的には、3 つの xml レイアウトを記述し、単一の int 引数を使用してロードするレイアウトを指定する単一の Fragment 実装を作成し、少量を実行します。このようなソリューションを機能させるには、プログラムによる初期化が必要です。理由は、重複するコードが少ないためです。

編集: 要件をより完全に解決する別のアプローチは、<Fragment>タグを<Layout>タグに置き換えて ID を与えることです。次に、Activity コードでそれらへの参照を保存し、onCreate() で View から削除し、最後に保存された各参照をプログラムで作成された Fragment のインスタンスに追加し、それを ViewPager に追加します。非常に見苦しいですが、それが XML ですべてを宣言的に定義する唯一の方法です。これらの要素が ViewPager 内にネストされていることが XML から明確ではないという問題がまだ残っているため、個人的には要点がわかりません。ListView と ListFragment は、同じ種類の暗黙的な関連付けで動作しますが、これは前例のないことではありません。

于 2012-08-17T00:25:39.180 に答える