МОДЕЛЬ MVC У ANDROID І СПОСТЕРЕЖЕННЯ ЗА ВМІСТОМ в Android додатку

Дуже важливо змалювати загальну картину того, як патерн MVC працює в Android з постачальниками вмісту

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

В Android патерн MVC працює так, як показано на рис 123

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

Постачальники вмісту пишуться так, щоб вони могли посилати події повідомлення при будь-якій зміні даних Це робиться шляхом виклику ContentResolver notifyChange Оскільки тільки постачальник вмісту володіє доступом з можливістю зміни даних, йому буде відомо про всі зміни даних

Повідомлення надсилаються до компоненту користувача інтерфейсу, найчастіше – ListView При цьому відбувається спостереження за обєктами Cursor, повязаними з унікальними ідентифікаторами ресурсів постачальника вмісту Повідомлення про відновлення курсора надходять від моделі до виду, у відповідь на виклик noti fyChange всередині її постачальника Вид і контролер відповідають видам і активностям Android, а також класам, які слухають генеруються ними події Зокрема, система доставляє повідомлення ContentObserver onChange екземплярам ContentObserver, зареєстрованим за допомогою Cursor registerContentObserver Класи Android автоматично реєструються на отримання оновлень курсора, всякий раз, коли розробник викликає метод начебто ListViewsetAdapter (ListAdapter) У списковому вигляді є внутрішній спостерігач вмісту, а адаптер списку буде реєструватися на отримання оновлень від обєкта Cursor

Рис 123 Типовий приклад використання курсорів і постачальників вмісту при застосуванні патерну Android MVC

Щоб уявити собі, як ці повідомлення працюють на практиці, припустимо, що активність готується викликати ContentResolver Delete Як ви незабаром побачите, відповідний постачальник вмісту спочатку видалить рядок зі своєї бази даних, а потім повідомить про це URI перетворювача вмісту, який відповідає цьому рядку Будь-які курсори-слухачі, задіяні в будь-якому вигляді, просто отримають повідомлення про те, що дані змінилися Види, в свою чергу, отримають подія оновлення та перемалюють себе таким чином, щоб на екрані відображалося новий стан Види малює будь-який стан, яке відноситься до області, займаної ними на дисплеї Якщо в цій області перебував елемент, який тільки що був видалений, то він зникне з інтерфейсу Обєкти Cursor діють в якості посередників між споживачами інформації курсора і системою постачальника вмісту Події йдуть від постачальника вмісту через курсор в систему видів Високий ступінь автоматизації цього ланцюга сильно спрощує життя розробнику – йому необхідно виконати мінімальний обсяг роботи, щоб все запрацювало Крім того, програмами не доведеться явно опитувати систему, щоб відображення моделі в них залишалося актуальним, так як модель сама повідомляє вид про те, що її стан змінився

Джерело: Android Програмування на Java для нового покоління мобільних пристроїв

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*