0

それぞれがLinearLayoutである64個の4つのフィールドを持つ8x8ボードがあります。

LinearLayoutのIDは(field1、field2 ... field64)のようになります。プログラムの後半で各フィールドの背景を変更したいのですが、変更したいレイアウトを取得する方法がわかりません。それらすべてをアレイに入れたかったのですが、機能していません。

private LinearLayout[] fields = new LinearLayout[65];
this.fields[field_id].setBackgroundColor(colour);

別のアプローチ:

for (int i=1; i<65; i++) {
       findViewById(R.id.field+i).setBackgroundColor(Color.WHITE);
}

それはうまく機能しません(明らかに)。これにどのようにアプローチすればよいですか?

4

3 に答える 3

0

IDを使用して配列を作成します。

int[] ids = {R.id.field1,R.id.field2...}

for (int i=0; i<ids.lenght; i++) {
findViewById(ids[i]).setBackgroundColor(Color.WHITE);
}

また

ViewGroup viewgroup = findViewById(R.id.parentview);

for(int i = 0; i < viewgroup.getChildCount();i++)
{
View child = viewgroup.getChildAt(i);
}
于 2012-12-27T13:21:38.727 に答える
0

次のように、それらをリストに追加できます。

List fieldList = new ArrayList(64);
fieldList.add(R.id.field1);
fieldList.add(R.id.field2);
fieldList.add(R.id.field3);
// etc.
fieldList.add(R.id.field64);

または、他の方法を使用して、そのようなリスト/配列を作成します。このようなすべてのフィールドを追加するのは少し面倒ですが、ループで使用できる使用可能なリストを提供します。

(で)フィールドのIDに番号を付け直すことも可能です(私は思いますR.java)。後で作成する場合は、質問のサンプルコードで試した方法を使用できます。R.java再生成時にこれらのIDが同じであるかどうかはわかりません...そうでない場合、このメソッドは使用できません。

于 2012-12-27T13:22:22.713 に答える
0

この方法でアクセスできます。少し遅くなりますが、問題が発生する可能性はありません。

for (int i=1; i<65; i++) {
  int id = getResources().getIdentifier("field" + i, "id", getPackageName())
  findViewById(id).setBackgroundColor(...);
}

しかし、それらをxmlに追加するのは大変な作業のように思えます(私は推測しますか?)。できれば、コードで追加してから、配列に保存することをお勧めします。

于 2012-12-27T13:24:52.017 に答える