0

いくつかの TextView 要素の値を変更しようとしていますが、配列リストを反復処理してこれらの値を追加しています。ただし、毎回使用される R.id 値を変更する方法が見つからないようです。例えば:

for (int i=0; i<arrayList.size(); i++)
{
    TextView t = (TextView) dialog.findViewById(R.id.value+(i));
    t.setText(arrayList.get(i));
}

値はanimals_eng1、animals_eng2などの形式になっています。

4

4 に答える 4

4

最善の策は、各テキスト ビューのリソース ID を含む配列を作成し、それらをループすることです。

元。

int[] textViewIds = new int[] { R.id.animals_eng1, R.id.animals_eng2, R.id.animals_eng3 }; 

次に、アクティビティでそれらをループして、必要な値を設定できます

for (int i=0; i<arrayList.size(); i++)
{
   ((TextView)findViewById(textViewIds[i])).setText(arrayList.get(i));
}

arrayList のサイズが、設定した textview リソース ID の数と同じであることを確認する必要があります。そうしないと、ループ時に範囲外の例外が発生します。

于 2012-04-25T17:01:02.640 に答える
1

あなたが求めていることを正確に行う方法はわかりませんが、ここに2つの選択肢があります:

1.整数の配列を作成し、配列の各要素を異なるビューID値に割り当てます

int[] ids = new int[arrayList.size()];
ids[0] = R.id.view0;
ids[1] = R.id.view1;
ids[2] = R.id.view2;
//...ids[n] = R.id.viewN; where n goes up to arrayList.size()
for (int i : ids){
     ((TextView)dialog.findViewById(ids[i])).setText(arrayList.get(i));
}

TextViewより動的なものが必要な場合は、すべての行が必要なため、上記の方法ではポイントが無効になることに注意してください。

2.TextViewsレイアウト xml でタグ付けしandroid:tag="prefix0"ます。たとえば、それぞれのTextViews. ループの前に、レイアウトの親ビューを見つけてfindViewWithTagから、ループ内でそのビューのメソッドを使用しforます。あなたのコードからDialog、カスタム レイアウト xml を使用していると思われるので、最初にその親を見つけます。

ViewGroup parent = dialog.findViewById(R.id.parent); //or whatever the name of your parent LinearLayout/RelativeLayout/whatever is
String commonPrefix = "prefix"; //or whatever you've tagged your views with
for (int i=0; i<arrayList.size(); i++){ 
    TextView t = (TextView) parent.findViewWithTag(commonPrefix+i);
    t.setText(arrayList.get(i)); 
}
于 2012-04-25T16:59:23.530 に答える
0

すべてのビューが同じコンテナー (およびそれらのみ) にある場合は、単にその子を反復処理します。

そうでない場合は、id の配列 (res 内) を追加して、それを反復処理できます。

于 2012-04-25T17:20:55.623 に答える
0

これを解決する 1 つの方法は、リソース ID を int 配列に入れ、インデックス i でリソースを取得することです。

TextView t = (TextView) dialog.findViewById(R.id.value+(i))

になる

TextView t = (TextView) dialog.findViewById(resourceArray[i])
于 2012-04-25T16:59:59.097 に答える