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

OK、includeタグの使い方を理解していますが、問題が発生しました。

基本的には、 TextViewImageView という2つの要素を持つXMLで定義されたレイアウトを作成したいと考えています。次に、配列全体を繰り返し処理し、配列内の項目(実行時に値が設定される)に応じてxmlレイアウト内のフィールドに値を設定します。したがって、XMLレイアウトの複数のコピーを作成し、フィールドに一意のデータを設定します。これで TextViewImageView の中にこのように LinearLayout をどのように再利用できるか分かりません定数idと私はこのレイアウトの複数のコピーを作成する必要があります。

リソースを膨らませて、そのコピーを作成する方法はありますか?そうです

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

^残念なことにそのようなコンストラクタはありません。

他の方法はすべてプログラム的に行うことですが、コードではなくビューのプロパティと LinearLayout プロパティをXMLで使用することをお勧めします。それは、 LinearLayout が私が推測しているコピーを作るためのテンプレートにしたいと思うようです...可能かどうか本当に分かりません。

24
追加された 編集された
ビュー: 2

2 答え

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

ここに例があります:

    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"?>



ここに私が膨張させて、人口を入れ、動的に挿入するcustom.xmlビューがあります:

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


    

        

        
    


この例が役立つことを願っています!

42
追加された
yaa、それはそうだ。 Thanx
追加された 著者 Crowni,
これを断片的に使用する方法はありますか?私は、このandroid.content.res.Resources $ NotFoundExceptionを実装した後、このエラーが多く発生するようです:StringリソースID#0x7f0e00a2
追加された 著者 KasparTr,
ループの途中でinflator.inflate()を繰り返す代わりに単純にレイアウトをコピーする方法はありますか?私は、膨らませることは単純にコピーすることと比べて非常に高価であると思われます。
追加された 著者 Scott Biggs,
ありがとう!インフレータの良い例も!
追加された 著者 Mailis Toompuu,
どうもありがとう!それはソートされて...私は別のインフレ(....)の呼び出しの周りに私の頭を取得する必要があると思う。
追加された 著者 gunboatmedia,

依然として同様のソリューションを探しているAnnyoneには、明らかにXMLで直接 include を使用することもできますが、コード内で参照することもできます。

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);

Source: Romain Guy

7
追加された