http://www.turbopro.ru/index.php/programmirovanie-pod-os-android/6434-android-knopki-obrabotka-sobytij | ||
Android. Кнопки (обработка событий)Класс Button — самый используемый из всех элементов управления. Так как является наследником Textview, то использует многие знакомые нам атрибуты: textColor, textSize и другие. Если разместить на экране кнопку и нажать на неё, то ничего не произойдёт. Необходимо написать код, который будет выполняться при нажатии. Существует несколько способов обработки нажатий на кнопку. Итак, обработка событий. Обработка событийПринцип обработки событий прост: источник генерирует событие и посылает его одному или более слушателям (listener). В этой схеме слушатель просто ожидает до тех пор, пока не получит событие. Как только событие получено, слушатель обрабатывает его и возвращает управление. В этой модели обработки событий слушатели должны:
Таким образом, чтобы создавать приложения, взаимодействующие с пользователем, необходимо:
Методы, принимающие и обрабатывающие события, определены в наборе интерфейсов. Класс view содержит набор интерфейсов, которые называются on...Listener(), в каждом из которых объявлен единственный абстрактный метод обратного вызова. Этот метод необходимо переопределить в пользовательском классе. Его будет вызывать система Android, когда экземпляр view (или потомок), к которому был подсоединен слушатель события, вызывается пользовательским взаимодействием с интерфейсом приложения. Всего класс view содержит шесть интерфейсов:
Обработка нажатия кнопкиСледующий пример реализует обработчик события onCiick(). Когда выполняется щелчок на кнопке, появляется сообщение, отображающее имя кнопки. Создайте новый проект MyButton. Откройте файл разметки и разместите три кнопки с идентификаторами button1, button2 и button3, надписями "Button l", "Button 2" и "Button 3", а также две метки с идентификаторами textView1 и textView2 и надписями: у первой ”Нажата кнопка:”, а у второй оставляем значение по умолчанию ”TextView”. Графическая разметка с обозначениями представлена ниже. Существует несколько способов обработки нажатия на кнопку. Рассмотрим их. Первый способПервый способ разработан для Android и использует атрибут XML – onClick, который записывается в XML-коде элемента управления (в частности и Button), нажатие которого мы собираемся обрабатывать. android:onClick="onMyClick" здесь: android:onClick – атрибут, которому присваивается имя метода обработки события onMyClick – метод, который будет обрабатывать нажатие. Имя метода должно быть осмысленным. Сам метод записывается в программном коде активности. В классе активности метод записывается в следующем формате: Попробуем этот метод на практике. Сделайте следующее: 1. Для каждой кнопки в XML-коде кнопки запишете обработчик: android:onClick="onMyClick" Обработчик будет один для всех кнопок. 2. В классе public class MainActivity extends Activity { Запишем один метод onMyClick, который будет обрабатывать все кнопки
Выполните компиляцию проекта. При нажатии соответствующей кнопки в надписи под кнопками будет отображаться сообщение о нажатии этой кнопки. Второй способВторой способ является традиционным для Java и использует интерфейсы. Для этого в нашем классе необходимо реализовать интерфейс View.OnClickListener. Данный интерфейс содержит единственный метод: abstract void onClick(View v), который необходимо определить в нашем классе. Подключение интерфейса выполняется следующим образом: 1. В классе public class MainActivity extends Activity напечатаете implements View.OnClickListener{. Для написания используйте подсказки Eclipse: наберите слово i и нажмите комбинацию клавиш Ctrl+Space для вывода вариантов продолжения. Eclipse предложит ключевое слово implements, нажимаем Enter. Далее, набираем View, ставим точку, Eclipse предложит список вариантов, выбираем OnClickListener. После этого будет сообщение об ошибке: подчеркнуто красной волнистой линией имя класса MainActivity, наводим на него курсор и выбираем «Add unimplemented methods».
Eclipse создаст заготовку метода onClick(View v):
2. В методе protected void onCreate(Bundle savedInstanceState) { выполняем поиск наших кнопок (findViewById) и регистрируем каждую кнопку как слушателя событий с помощью метода setOnClickListener():
Все готово. Осталось написать код обработчика нажатия кнопок. Для демонстрации второго метода обработки нажатия наших кнопок внесем в наш класс следующие изменения: Удалим из XML-файла для всех кнопок android:onClick="onMyClick" полностью заменим метод public void onMyClick(View v) { …}. Напишем обработчик onClick(View v). Код этого обработчика повторяет код прежнего обработчика: различия только в названии метода и выводимом тексте.
|
||