web-dev-qa-db-ja.com

Android複数のレイアウトインスタンスを作成するためのテンプレートとしてレイアウトを使用する

OK、インクルードタグの使い方は理解できましたが、問題が発生しました。

基本的に、いくつかのTextViewsとImageViewを含むレイアウトをxmlで定義したいと思います。次に、配列全体を反復処理し、配列の内容(実行時に入力される)に応じてxmlレイアウト内のフィールドに入力します。したがって、xmlレイアウトの複数のコピーを作成し、フィールドに一意のデータを入力します。 LinearLayoutsとTextViewsには定数IDがあり、複数作成する必要があるため、このImageViewをこのように再利用する方法はわかりません。このレイアウトのコピー。

リソースを膨らませてからコピーする方法はありますか?

LinearLayout one = new LinearLayout(inflater.inflate(R.layout.home, container, false));

^残念ながら、そのようなコンストラクタはありません。

他の唯一の方法は、それをすべてプログラムで行うことですが、コードではなくビューのプロパティとLinearLayoutをxmlに含めることをお勧めします。 LinearLayoutを、あなたがコピーを作成できるテンプレートにしたいようなものです...それが可能かどうか本当にわかりません。

25
gunboatmedia

あなたはこれを簡単に行うことができます、あなたはそれを分解する必要があります。まず、動的ビューを挿入するレイアウトをロードします。次に、サブビューを膨らませ、必要な回数だけサブビューに入力します。次に、ビューを親レイアウトに追加し、最後にアクティビティのコンテンツビューを親ビューに設定します。

次に例を示します。

LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
LinearLayout parent = (LinearLayout) inflater.inflate(R.layout.main, null);

for (int i = 0; i < 3; i++) {
    View custom = inflater.inflate(R.layout.custom, null);
    TextView tv = (TextView) custom.findViewById(R.id.text);
    tv.setText("Custom View " + i);
    parent.addView(custom);
}

setContentView(parent);

ここに私が挿入しているmain.xmlファイルがあります:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent"
    Android:layout_height="fill_parent"
    Android:orientation="vertical" >

</LinearLayout>

そして、ここに私が膨らませ、移入し、動的に挿入するcustom.xmlビューがあります:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:Android="http://schemas.Android.com/apk/res/Android"
    Android:layout_width="fill_parent"
    Android:layout_height="wrap_content"
    Android:orientation="horizontal" >

    <LinearLayout
        xmlns:Android="http://schemas.Android.com/apk/res/Android"
        Android:layout_width="fill_parent"
        Android:layout_height="fill_parent"
        Android:orientation="horizontal" >

        <ImageView
            Android:layout_width="wrap_content"
            Android:layout_height="wrap_content"
            Android:src="@drawable/ic_launcher" />

        <TextView
            Android:id="@+id/text"
            Android:layout_width="fill_parent"
            Android:layout_height="wrap_content" />
    </LinearLayout>

</LinearLayout>
43
Craigy

Nyoneがまだ同様のソリューションを探している場合、どうやらincludeを直接xmlで使用して、コードでそれらを参照することもできます。

LinearLayout row1 = (LinearLayout) findViewById(R.id.row1)
TextView text1 = row1.findViewById(R.id.text);

LinearLayout row2 = (LinearLayout) findViewById(R.id.row2)
TextView text2 = row2.findViewById(R.id.text);

出典: Romain Guy

7
ajuser