2017-03-14 9 views
0

AndroidスタジオでimageButtonsとしてアクセスするボードに、6つのダイスのグリッドがあります。各画像ボタンにはID(button1は "ImageButton1"、ボタン2は "ImageButton2"など)があります。私はむしろ、以下に示すような6セミ同じ文を書くよりも、forループのいずれかにこれらのボタンにアクセスしたいと思います:imageButtton1は等々変数c1に保存されている、とされるだろうforループの変数名を変更するJava

for (int i=0; i<6; i++) { 
     ImageButton c+i = (ImageButton)findViewById(R.id.imageButton+i); 
} 

。明らかに、このforループは書かれているように動作しません。これを実装する方法はありますか?

+4

ImageButtonの配列を使用してください... –

+1

あなたの 'for'ループの外側でボタンを使用する予定がない場合は、6つの変数は必要ありません。一度に1つずつ扱うので、すべての名前に1つの名前を使用するとうまくいきます。 – VHS

+0

あなたはそのように行く必要がありますか? –

答えて

2

残念ながら、名前でJava変数にアクセスすることはできません。

ただし、リストに1回だけ追加できますか。

List<ImageButton> allButtons = new ArrayList<>() {{ 
    add((ImageButton) findViewById(R.id.imageButton1)); 
    add((ImageButton) findViewById(R.id.imageButton2)); 
    add((ImageButton) findViewById(R.id.imageButton3)); 
    // etc. 
}}; 

他のコードを簡単に反復することで、コードを簡単にすることができます。

for (ImageButton button : allButtons) { 
    ... 
} 

また、あなたはインデックスでイメージボタンを返すようにメソッドを作成することができます。

private ImageButton imageButton(int index) { 
    switch (index) { 
     case 1: return (ImageButton) findViewById(R.id.imageButton1); 
     case 2: return (ImageButton) findViewById(R.id.imageButton2); 
     case 3: return (ImageButton) findViewById(R.id.imageButton3); 
     //etc. 
    } 
} 

これは重複しているが、それはシンプルで読みやすいですし、すべて一つの場所で—すなわち維持するために簡単にする必要があります。

+0

彼は、自分がやっていることをせずにループでimageButton1,2のインスタンスを取得する方法を尋ねていたと思います。 –

+0

彼がやろうとしていたことはできません。静的な名前を持つ変数への動的アクセスと呼ばれています。あなたのコードはImageButtonを配列に追加する方法を示していますが、動的名を使ってループ内でImageButtonを初期化したかったのです。 –

関連する問題