0

9ボタンを含むAndroidアプリでアクティビティを定義しました。各ボタンは、同じイベントリスナーをリッスンする必要があります。

生成されたRクラスを見ると、それらのIDが定義されています。

 public static final int btn1=0x7f040001;
 ...
 public static final int btn1=0x7f040009;

私の質問は、forループでIDを循環させるリスナーを追加しても大丈夫ですか?

for (int i= R.id.btn1; i<=R.id.btn9;i++)
{
   Button button = (Button)findViewById(i);
   button.setOnTouchListener(new View.OnTouchListener() {
        @Override public boolean onTouch(View v, MotionEvent event) {
             ...
        }
   });
}

または、Idがコンパイラによって再割り当てされ、コードが破損する状況がありますか?

IntellijIdea環境を使用してアプリを構築しています。

4

1 に答える 1

8

Rファイルが連続していないIDで再生成された場合、これは非常に悪い考えになると思います。IDを含むint配列を格納し、それをループすることをお勧めします。

元。

int[] views = new int[] { R.id.btn1, R.id.btn2, R.id.btn3, ...... R.id.btn9 };

for (int i= 0; i< views.length ;i++)
{
   Button button = (Button)findViewById(views[i]);
   button.setOnTouchListener(new View.OnTouchListener() {
        @Override public boolean onTouch(View v, MotionEvent event) {
             ...
        }
   });
}
于 2012-05-29T18:17:08.460 に答える