Приложения Android управляются событиями (event-driven). Это значит, что приложение запускается и ожидает событий пользователя, например, нажатие кнопки. Когда приложение ожидает наступления события, оно прослушивает данное событие. Объект, создаваемый для ответа называется слушателем (listener).
Нам надо научить кнопку реагировать на нажатие. Для этого у кнопки есть метод setOnClickListener (View.OnClickListener). На вход подается объект с интерфейсом View.OnClickListener. Именно этому объекту кнопка поручит обрабатывать нажатия. Давайте создадим такой объект. Данный код нунжо прописать в методе onCreate.
Назначение прослушивателя события нажатия кнопки |
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); … mQuestionTextView = (TextView) findViewById(R.id.question_text_view); mTrueButton = (Button) findViewById(R.id.true_button); mTrueButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mQuestionTextView.setText('нажата кнопка') } }); } |
Слушатель реализован в виде внутреннего анонимного класса. Анонимный класс реализует интерфейс OnClickListener, и должен реализовать единственный метод данного интерфейса onClick(View).
Обработка события нажатия onClick
Существует несколько способов обработки нажатия на кнопку. 1) Традиционный для Java, с использованием интерфейсов, для этого необходимо реализовать интерфейс View.OnClickListener либо других событийных интерфейсов. 2) Разработанный специально для Android. Рассмотрим его подробнее.
Для прослушивания события onClick, можно использовать атрибут XML – onClick, который записывается в XML-коде элемента управления (в частности к Button), нажатие которого мы собираемся обрабатывать.
Добавление прослушивателя onClick в XML. Листинг 1. |
android:layout_width="wrap_content" android:layout_gravity="bottom|right" |
Атрибут android:onClick=’onClickFind’ элемента button на событие click запускает экшн onClickFind контроллера MainActivity.
Вернемся к контроллеру MainActivity, и преобразуем его, дописав метод onClickFind.
Экшн onclickFind контроллера MainActivity. Листинг 1. |
package by.colony.mikhalkevich.android; |
Метод onClickFind входящим параметром принимает данные текущего шаблона. В нем имеется два объекта text и category и переменную chooseCategory с данными выбранной категории. Объект text обращается к методу setText, который обновляет атрибут android:text.
Если несколько кнопок представления вызывают событием один и тот же метод, то этому методу необходимо определить какая кнопка была нажата. Сделать это можно с помощью метода getId класса View.
Метод, обрабатывающий несколько кнопок. |
public void onClickFind(View v) { //ищем второй TextView TextView tv = (TextView)findViewById(R.id.textView2); // определяем ID элемента и обрабатываем событие switch (v.getId()) { case R.id.button1: tv.setText("Button 1"); break; case R.id.button2: tv.setText("Button 2"); break; case R.id.button3: tv.setText("Button 3"); break; } } |
Обработчик нажатия готов.