Запрограммируйте много кнопок! - PullRequest
0 голосов
/ 13 апреля 2011

У меня есть 25 кнопок в моем макете. Как эффективный способ узнать, какая кнопка нажата или получить их идентификаторы ??

Заранее спасибо ..

Ответы [ 5 ]

1 голос
/ 13 апреля 2011

Кнопка реализует View.OnClickListener, который получает представление, по которому щелкнули. Вы можете получить удостоверение личности следующим образом ...

@Override
public void onClick(View view) {
    int Id = view.getId();
}
0 голосов
/ 13 апреля 2011

Стандартный способ сделать это - объявить каждую кнопку с уникальным id в файле макета 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 кнопок на один экран. Если да, вы можете переосмыслить свой дизайн.

0 голосов
/ 13 апреля 2011

Примерно так должно работать:

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);
0 голосов
/ 13 апреля 2011

я не понимаю, где проблема

в макете xml добавьте onClick = "onClick" для каждой кнопки, затем в функции "Активное объявление"

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 для кнопки в вашем деятельность, вы можете назначить метод Ваша кнопка в макете XML, используя атрибут android: onClick

0 голосов
/ 13 апреля 2011

В соответствии с документацией Android для Activity , единственный способ найти представление - найти findViewById.Если вы хотите что-то сделать, когда установлена ​​кнопка с определенным идентификатором, вам придется добавлять onClickListeners к каждой кнопке отдельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...