#android #user-interface #layout
#Android #пользовательский интерфейс #макет
Вопрос:
У меня в макете 25 кнопок. Каков эффективный способ узнать, какая кнопка нажата, или получить их идентификаторы??
Заранее спасибо..
Комментарии:
1. Я не видел вашего пользовательского интерфейса, но если вы не программируете для планшета, навигация по 25 кнопкам на сенсорном устройстве с поддержкой пальцев кажется очень сложной.
Ответ №1:
Кнопка реализует представление.OnClickListener, который получает просмотр, на который был нажат. Вы можете получить идентификатор следующим образом…
@Override
public void onClick(View view) {
int Id = view.getId();
}
Ответ №2:
я не понимаю, в чем проблема
в layout xml добавьте onClick = «onClick» для каждой кнопки, а затем в функцию Activity ad
public void onClick(View v) {
switch(v.getId()){
case R.id.Button1:
break;
case R.id.Button2:
break;
case R.id.Button3:
break;
//....
}
}
РЕДАКТИРОВАТЬ (потому что я не могу добавить комментарий к чьему-либо другому ответу:
@Зак Раттнер
В соответствии с этим http://developer.android.com/reference/android/widget/Button.html Зак, ты ошибаешься
Однако вместо применения OnClickListener к кнопке в вашем activity вы можете назначить метод вашей кнопке в XML-макете, используя атрибут android:onClick
Ответ №3:
Согласно документации Android для Activity, единственный способ найти представление — через findViewById. Если вы хотите что-то сделать, когда установлена кнопка с определенным идентификатором, то вам придется добавить onClickListeners к каждой кнопке по отдельности.
Ответ №4:
Что-то вроде этого должно сработать:
Button button1 = (Button)findViewById(R.id.Button01);
Button button2 = (Button)findViewById(R.id.Button02);
private class myListener implements OnClickListener
{
@Override
public void onClick(View arg0) {
if (arg0 == button1)
{
//button 1 clicked
}
else if (arg0 == button2)
{
//button 2 clicked
}
//etc
}
}
myListener listener = new myListener();
button1.setOnClickListener(listener);
button2.setOnClickListener(listener);
Ответ №5:
Стандартный способ сделать это — объявить каждую кнопку с уникальным идентификатором в файле XML-макета, вот так:
<Button android:id="@ id/my_button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/my_button_text"/>
Обратите внимание, что вы должны делать это для каждой кнопки.
Далее, вы можете использовать следующий фрагмент кода в качестве прослушивателей кнопок:
final Button button1 = (Button) findViewById(R.id.my_button1);
button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
// Perform action on click
}
});
Это будет неэффективно, поскольку вы создадите 25 новых View.OnClickListener
объектов (по одному для каждой кнопки), а поскольку вы программируете для Android, устройства с ограниченным объемом памяти, будет лучше создать только одного прослушивателя и назначить его каждой кнопке, а затем проверить, какой кнопке View v
соответствует.
Я надеюсь, вы не собираетесь размещать 25 кнопок на одном экране. Если да, возможно, вы захотите пересмотреть свой дизайн.