Главная » Разработка для Android » МОДЕЛЬ MVC В ANDROID И НАБЛЮДЕНИЕ ЗА СОДЕРЖИМЫМ в Android приложении

0

Очень важно обрисовать общую картину того, как паттерн MVC работает в Android с поставщиками содержимого.

Чтобы оценить всю мощь фреймворка, использующего поставщики содержимого, необходимо знать о том, как события обновления курсора вызывают динамические обновления пользовательского интерфейса в Android. Нам кажется, что, затронув эту тему, мы сможем акцентировать внимание на часто упускаемых из виду путях обмена информацией, присутствующих в традиционном паттерне программирования «Модель-вид-контроллер». В целом, работа этого паттерна строится так: вид (view) принимает события пользовательского ввода и доносит эту информацию контроллеру (controller). Контроллер вносит изменения в модель (model), а модель посылает события обновления виду, а также любому другому наблюдателю, который регистрируется как заинтересованный в работе модели. Вид отображает содержимое модели – обычно это происходит без прямого привлечения логики приложения – и в идеальном случае просто итерирует данные, относящиеся к модели.

В Android паттерн MVC работает так, как показано на рис. 12.3.

Модель состоит из поставщика содержимого и курсоров, возвращаемых его методом query, а также из данных, которые содержатся в таблицах SQLite.

Поставщики содержимого пишутся так, чтобы они могли посылать события уведомления при любом изменении данных. Это делается путем вызова ContentResolver. notifyChange. Поскольку только поставщик содержимого обладает доступом с возможностью изменения данных, ему будет известно обо всех изменениях данных.

Уведомления направляются к компоненту пользовательского интерфейса, зачастую – ListView. При этом происходит наблюдение за объектами Cursor, связанными с уникальными идентификаторами ресурсов поставщика содержимого. Сообщения об обновлении курсора поступают от модели к виду, в ответ на вызов noti fyChange внутри поставщика содержимого. Вид и контроллер соответствуют видам и активностям Android, а также классам, которые слушают генерируемые ими события. В частности, система доставляет сообщения ContentObserver. onChange экземплярам ContentObserver, зарегистрированным при помощи Cursor. registerContentObserver. Классы Android автоматически регистрируются на получение обновлений курсора, всякий раз, когда разработчик вызывает метод вроде ListView.setAdapter(ListAdapter). В списковом виде имеется внутренний наблюдатель содержимого, а адаптер списка будет регистрироваться на получение обновлений от объекта Cursor.

Рис. 12.3. Типичный пример использования курсоров и поставщиков содержимого при применении паттерна Android MVC

Чтобы представить себе, как эти уведомления работают на практике, предположим, что активность готовится вызвать ContentResolver .delete. Как вы вскоре увидите, соответствующий поставщик содержимого сначала удалит строку из своей базы данных, а затем уведомит об этом URI преобразователя содержимого, который соответствует данной строке. Любые курсоры-слушатели, задействованные в любом виде, просто получат уведомления о том, что данные изменились. Виды, в свою очередь, получат событие обновления и перерисуют себя таким образом, чтобы на экране отображалось новое состояние. Виды отрисовывают любое состояние, которое относится к области, занимаемой ими на дисплее. Если в этой области находился элемент, который только что был удален, то он исчезнет из пользовательского интерфейса. Объекты Cursor действуют в качестве посредников между потребителями информации курсора и системой поставщика содержимого. События идут от поставщика содержимого через курсор в систему видов. Высокая степень автоматизации этой цепи сильно упрощает жизнь разработчику – ему необходимо выполнить минимальный объем работы, чтобы все заработало. Кроме того, программам не придется явно опрашивать систему, чтобы отображение модели в них оставалось актуальным, так как модель сама уведомляет вид о том, что ее состояние изменилось.

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

По теме:

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