Вопрос:
У меня есть специальная кнопка, которая появляется в нескольких областях в том же самом действии, которое имеет функцию сброса. Поскольку AS не разрешало мне объявлять несколько экземпляров этой кнопки в одном и том же действии с тем же именем ID, мне было интересно, можно ли воссоздать эту функциональность по-другому.
Теперь у меня есть 3 разных кнопки, соответственно называемые Reset, с идентификаторами reset1, reset2, reset3;
Чтобы справиться с их использованием, у меня просто есть оператор switch, который выглядит следующим образом (псевдо):
switch(button){ case reset1: case reset2: case reset3: doSomething(); break; }
Для меня было бы проще просто использовать один идентификатор для всех этих кнопок. Почему я не могу это сделать? Каковы риски? Есть ли альтернатива методу, который я использую сейчас?
Лучший ответ:
Создайте единый метод в своей деятельности, а затем укажите этот метод с каждой вашей кнопкой с помощью атрибута onClick. Как это:
<Button android:id=»@+id/reset1″ android:layout_width=»wrap_content» android:layout_height=»wrap_content» android:text=»Reset» android:onClick=»onReset»/> //Check this <Button android:id=»@+id/reset2″ android:layout_width=»wrap_content» android:layout_height=»wrap_content» android:text=»Reset» android:onClick=»onReset»/> <Button android:id=»@+id/reset3″ android:layout_width=»wrap_content» android:layout_height=»wrap_content» android:text=»Reset» android:onClick=»onReset»/>
Теперь в вашем MyActivity.java создайте метод onReset как:
public void onReset(View v){ //do something. }
Помните, что метод должен быть общедоступным и иметь представление как параметр. Вам даже не нужно назначать идентификатор этим кнопкам, если это не требуется для другой цели.
Ответ №1
Вместо этого оператора switch вы можете назначить один и тот же OnClickListener для всех трех кнопок:
OnClickListener listener = new OnClickListener() { public void onClick(View view) { doSomething(); } } findViewById(R.id.reset1).setOnClickListener(listener); findViewById(R.id.reset2).setOnClickListener(listener); findViewById(R.id.reset3).setOnClickListener(listener);