Одно событие onClick для нескольких кнопок

Любой виджет(контрол) в Android унаследован от базового класса View. В свою очередь каждому View можно поставить в соответсвтвие некоторый идентификатор (далее ID).

<Button 
android:id="@+id/my_button"
....
/>

ID обычно назначаются в xml и используются для нахождения контрола в текущем дереве всех View.

Button myButton = (Button) findViewById(R.id.my_button);

Детектирование нажатия(click) на любой View (не обязательно Button) происходит по средством реализации интерфейса View.OnClickListener. Это можно сделать двумя способами: имплеменировав этот интерфейс Activity либо создать инстанс анонимного класса (new View.OnClickListener()). Но главное что надо сделать – это в обязательном порядке переопределить метод OnClick() интерфейса View.OnClickListener. Да, и не забыть, что надо назначить необходимому контрлу его слушателя (view.setOnClickListener(onClickListener)). В добавок один слушатель можно назначить для любого количества контролов.

Как различать по какому View было совершено нажатие? Достаточтно только посмотреть на сигнатуру метода onClick интерфейса View.OnClickListener:

public abstract void onClick (View v){}

Внутри этого метода разработчики позволяют нам использовать ссылку на View, по которому было совершено нажатие (в данном случае это View v). Осталось просто отличать различные view по их индивидуальному признаку. Тут нам на помощь приходит идентификатор ID. Метод view.getId() возвращает нам значении идентификатора коткретного контрола. Осталось только сопоставить его.

        @Override
        public void onClick(View v) {
            switch (v.getId())
            {
                case R.id.my_button1:
                    //выполняем необходимое действие
                    break; // вызывается для выхода из блока switch (при вызове дальнейший код не исполняется)
                case R.id.my_button2:
                    //выполняем необходимое действие
                    break;
                case R.id.my_button3:
                     //выполняем необходимое действие
                    break;
                case R.id.my_button4:
                    //выполняем необходимое действие
                    break;
            }
        }

Comments are closed