Запрограммируйте много кнопок!

#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 кнопок на одном экране. Если да, возможно, вы захотите пересмотреть свой дизайн.