Главная » Разработка для Android » Подключение контроллера – программирование Android

0

В разделе «Сборка графического интерфейса» выше мы показали вид с двумя кнопками. Конечно, это симпатичные кнопки, но они бесполезны. При их нажатии ничего не происходит.

В подразделе «Контроллер» предыдущего раздела было описано, как фреймворк Android преобразует внешние воздействия (прикосновения к экрану, нажатия клавиш и т. д.) в события, которые выстраиваются в очередь, а потом передаются приложению. В примере 7.4 показано, как добавить обработчик событий к одной из кнопок демонстрационного примера так, чтобы при нажатии происходило определенное действие.

Пример 7.4. Подключение кнопки

После запуска такой вариант приложения по-прежнему очень напоминает рис. 7.2. Но, в отличие от предыдущего примера в данной версии, всякий раз, когда пользователь нажимает кнопку Green (Зеленый), цифры в полях EditText изменяются (рис. 7.4).

Рис. 7.4. Рабочая кнопка

Обычное изменение цифр – не такая уж интересная функция, но этот небольшой пример демонстрирует стандартный механизм, при помощи которого приложение реагирует на события пользовательского интерфейса. Важно отметить что, несмотря на создающееся впечатление, данный пример не нарушает правила разделения ответственности, принятого в MVC! В ответ на вызов set Text данной реализации OnClіckListener объект EditText обновляет внутреннее представление текста, который следует отобразить, а затем вызывает собственный метод invalidate. Немедленной отрисовки на экране не происходит. Вообще, очень немногие правила в программировании являются абсолютными. Замечание о необходимости разделения модели, вида и контроллера – почти абсолютное правило.

В данном примере экземпляр класса Button подключается к его поведению при помощи обратного вызова. Button – это подкласс View, определяющий интерфейс под названием OnCl і ckListener и метод, называющийся setOnClіckListener, при помощи которого регистрируется слушатель. Интерфейс OnClіckListener определяет единственный метод – onClick. Когда кнопка Button получает событие от фреймворка, то дополнительно ко всем другим задачам, которые ему приходится выполнить, кнопка проверяет событие и определяет, квалифицируется ли оно как щелчок. (Кнопка из первого примера при нажатии уже подсвечивается, даже пока к ней еще не добавлен слушатель.) Если событие квалифицируется как щелчок, а к кнопке добавлен слушатель щелчков, то активируется метод onClick, относящийся к слушателю.

Слушатель щелчков свободно может реализовывать любые необходимые пользовательские поведения. В частности, в предыдущем примере пользовательское поведение создает два случайных числа в диапазоне от 0 до 200 и ставит по одному числу в каждое из двух текстовых полей. Можно и не делать подкласс от Button и не переопределять его методы обработки событий. Все, что требуется для расширения существующего поведения, – зарегистрировать слушатель щелчков, реализующий желаемое поведение. Конечно же, так гораздо проще!

Обработчик щелчков особенно интересен еще и тем, что в самом сердце системы Android – в очереди событий фреймворка – нет такого феномена, как событие щелчка! Вместо этого при обработке событий View концепция щелчка синтезируется из других событий. Если устройство имеет сенсорный экран, то, например, легкий удар пальцем по экрану воспринимается как щелчок. Если на устройстве есть центральная клавиша на игровой крестовине либо клавиша Enter, то при нажатии и отпускании каждой из этих клавиш также будет регистрироваться щелчок. Клиентам вида неважно, какое именно событие воспринимается как щелчок и как оно генерируется на конкретном устройстве. Клиенты должны обрабатывать только событие в общем виде, а деталями выполнения следует заниматься фреймворку.

У View может быть только один onClіckListener. При повторном вызове метода onClіckListener к тому или иному View старый слушатель будет удален, а на его место поставлен новый. С другой стороны, отдельный слушатель может принимать сигналы не только от одного View. Например, код из примера 7.5 – это часть другого приложения, которое выглядит точно как программа из примера 7.2. Но в данном случае содержимое текстового поля будет обновляться при нажатии любой из двух кнопок.

Такая возможность может быть очень удобна в приложении, где несколько воздействий вызывают одинаковое поведение. Но не поддавайтесь соблазну создать единственный, колоссальный слушатель для всех ваших виджетов! Если сделать в коде множество мелких виджетов, каждый из которых реализует одиночное, четкое поведение, то такой код будет гораздо проще поддерживать и модифицировать.

Пример 7.5. Слушание нескольких кнопок

Источник: Android. Программирование на Java для нового поколения мобильных устройств

По теме:

  • Комментарии