Синхронизируйте пользовательский интерфейс и данные повторного просмотра в текущем фрагменте с пользовательским интерфейсом и данными повторного просмотра в соседнем фрагменте - PullRequest
0 голосов
/ 14 сентября 2018

Это «лайк» на Facebook. Я хотел бы синхронизировать эти повторные обзоры с этими двумя частями. Если вы нажмете кнопку «Мне нравится» в представлении переработчика одним куском, кнопка «Нравится» в представлении утилизатора изменится при переходе на другое изделие.

Какой метод я должен использовать? интерфейс? оказание услуг? Карта Должен ли я использовать это?

Какой метод вы используете для синхронизации данных двух фрагментов?

1 Ответ

0 голосов
/ 14 сентября 2018

Вы должны использовать ViewModel из компонентов архитектуры. https://developer.android.com/topic/libraries/architecture/.

По сути, вы создаете модель представления в операции, чтобы она сохранялась с областью действия

//this is the instance of the activity
ViewModelProviders.of(this)

Затем вы можете получить экземпляр этой модели представления в каждом фрагменте, используя

ViewModelProviders.of(getActivity())

Модель представления затем может использоваться как в стандартной архитектуре MVVM.

Каждый фрагмент должен регистрироваться в компонентах, поддерживающих жизненный цикл, которые предоставит ViewModel. MutableLiveData - это один из таких компонентов, который вы можете использовать для предоставления данных тому, кто интересуется данными (в данном случае каждый фрагмент)

Имейте в виду, что LiveData, хотя и выполняет фантастическую работу, может быть ограничена, поскольку она хранит данные как состояние во времени. Это здорово, но андроид должен развиваться там, где им движут события) В качестве примера. Если у вас есть модель представления, которая отправляет данные в представление через liveata, это может вызвать диалог. Когда пользователь закрывает это диалоговое окно и вызывает изменение конфигурации (уничтожает и воссоздает действие), представление получит состояние активных данных в тот момент, когда они были установлены, и снова отобразит диалоговое окно. По сути, каждый раз, когда вы поворачиваете устройство, оно может отображать диалоговое окно, даже если вы его отклонили. Хакерское решение этой проблемы - уведомить модель представления об удалении состояния в liveata после закрытия диалогового окна. но это создает ряд других проблем, в том числе связывание состояния вида с моделью представления

Это гораздо более гибко, если компонент, поддерживающий жизненный цикл, вместо этого отправляет события, когда данные изменяются. Подумайте, Rxjava, который осведомлен о жизненном цикле. Вы добавляете данные в компонент RXJava, и наблюдаемая предоставляет данные наблюдателю, когда представление находится в состоянии его использования (> onresume и

Надеюсь, это даст вам отправную точку. Дайте мне знать, если вам нужно больше деталей

...