Главная » Разработка для Android » Слушание модели – программирование Android

0

 

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

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

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

Два следующих класса, показанных в примере 7.6, составляют модель, которая будет поддерживать расширения для демонстрационного приложения. Эти классы обеспечивают возможность хранения списка объектов, каждый из которых имеет координаты х и у, обладает цветом и размером. Кроме того, они предоставляют способ для регистрации слушателя и интерфейс, реализовывать который должен слушатель. В основе этих примеров лежит обычная модель слушателя, поэтому примеры достаточно просты.

Пример 7.6. Модель Dots

Дополнительно к этой модели изучим и следующий пример, в котором будет показан библиотечный виджет DotView, используемый для просмотра данной модели. Его задача – отрисовать точки, предоставленные моделью. Они должны иметь нужный цвет и правильно располагаться. Полный исходный код для данного примера приведен на сайте книги.

В примере 7.7 показано новое демонстрационное приложение, к которому теперь добавлены модель и вид.

Пример 7.7. Демонстрационная версия Dots

Вот комментарии к фрагментам кода, отмеченным цифрами.

Новый DotView добавляется поверх макета, полученного из XML-определения.

Обратные вызовы onClіckListener добавляются к кнопкам Red (Красный) и Green (Зеленый). Эти обработчики событий отличаются от обработчиков, приведенных в предыдущем примере, только тем, что здесь их поведение опосредовано локальным методом makeDot. Этот новый метод создает точку (элемент 5).

Вызов makeDot осуществляется в onClick (тогда вызов происходит при нажатии кнопки).

Самое существенное изменение в примере происходит там, где модель подключается к виду. При этом для установки dotsChangeListener используется обратный вызов. Когда модель изменяется, вызывается данный новый слушатель. Он записывает координаты х и у последней точки соответственно в левое и правое текстовые поля и посылает запрос DotView, чтобы этот вид перерисовал себя (вызов invalidate).

Это определение makeDot. Данный новый метод создает точку, убеждается, что она находится в пределах границ DotView, и добавляет ее к модели. Кроме того, в данном случае цвет точки можно указать в качестве параметра.

На рис. 7.5 показано, как выглядит работающее приложение.

Если нажать кнопку Red (Красный), то в DotView появится новая красная точка. Если нажать Green (Зеленый), возникнет зеленая. Текстовые поля содержат координаты последней добавленной точки.

Рис. 7.5. Запуск демонстрационного приложения Dots

Базовая структура примера 7.2 по-прежнему узнаваема, но мы видим и некоторые расширения.

Вот цепь событий, которые происходят после нажатия, например, кнопки Green (Зеленый).

1. При нажатии кнопки вызывается ее onClickHandler.

2. Из-за этого происходит вызов makeDot с цветовым аргументом Col or. GREEN. Метод makeDot генерирует случайные координаты и добавляет новую зеленую точку (Dot) в модель в этих координатах.

3. Когда модель обновится, она вызывает onDotsChangeListener.

4. Слушатель обновляет значения текстовых видов и запрашивает перерисовку DotView.

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

По теме:

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