Intereting Posts
Соответствующее хранение и отображение моих закладок / истории? Android: Поддержка множественной плотности изображения – ширина и ширина шкалы высоты? Макет навигационного ящика заголовок на панели инструментов не меняется Android не смог разрешить все зависимости для конфигурации 'classpath' Android и протокольные буферы Как бороться с различными пропорциями в libGDX? Изображения были перетасованы при прокрутке ListView с помощью ViewHolder Android – переход на активность без перезагрузки Какая часть Java 6 API реализована Android? Файл APK Repackage для хранения настраиваемых активов – какой инструмент построения использовать? Изменение сводки CheckBoxPreference на основе проверенного состояния ObservableInt вызывает сбои в библиотеке DataBinding Не удается получить трансляцию. Назначение UsbManager.ACTION_USB_DEVICE_ATTACHED / UsbManager.ACTION_USB_DEVICE_DETACHED GoogleMap V2 загружает карту случайного андроида Программный щелчок в Android WebView

Android: использование шаблона наблюдателя с представлениями (возможно, MVC, связанные с MVVM)

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

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

Поскольку данные измерений опрошены от внешнего устройства, данные измерений (на самом деле около тридцати байт данных) обновляются в объекте хранения данных (который в условиях MVC, я предполагаю, является «моделью»).

В любое время в UI Views будет отображаться только небольшое подмножество этих данных. Как правило, данный вид будет интересоваться только представлением одного конкретного байта данных измерений. Когда пользователь перейдет на разные классы активности, будут отображаться другие представления, которые будут отображать другой поднабор этих данных.

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

Возможные варианты:

  1. Используйте существующий класс Observer и связанные классы.

  2. Вид «бросить мой собственный» шаблон наблюдателя, создав мои собственные функции register () и unregister () в модели данных. Представления наблюдателей будут храниться в ArrayList (или, возможно, более сложном расположении одного списка наблюдателей на элемент данных). Я postInvalidate() бы этот ArrayList каждый раз, когда данные будут обновлены, и вызовет invalidate() (или postInvalidate() конечно, в зависимости от моей компоновки потоков).

Есть ли причины, по которым я должен использовать один из вышеперечисленных над другим? И есть ли какой-нибудь другой механизм «наблюдателя», который я должен рассмотреть?

    Многие представления в Android поддерживаются некоторым подклассом BaseAdapter который имеет метод notifyDataSetChanged() который инструктирует представление обновить себя. Если вы используете представление (например, ListView или GridView или любой AdapterView ), то он поддерживается базовым адаптером, и вы можете просто обновить этот адаптер, и представление обновится.

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