Как правильно доставлять события из ViewModel? - PullRequest
0 голосов
/ 26 ноября 2018

Мне нужен какой-то способ доставки событий, который должен быть выполнен только один раз из ViewModel.В настоящее время я использую LiveData для этого.Вариант использования:

Я строю какое-то намерение, а затем я должен поставить его на фрагмент.Проблема очевидна, после поворота я получаю старые данные и снова запускаю StartActivity.Я не хочу использовать некоторые хаки с проверками и т. Д. Я уверен, что должен быть правильный способ сделать такие вещи.Единственный способ, который я нашел здесь: ссылка - SingleLiveEvent.

Итак, это правильный способ делать такие вещи?Как правильно доставлять события, зависящие от пользовательского интерфейса, из ViewModel?

1 Ответ

0 голосов
/ 28 ноября 2018

Это правильный способ делать такие вещи?

Ответ на этот вопрос - да, если это делает работу без утечки каких-либо объектов, чемвы, вероятно, нашли правильное решение!.


Как правильно доставлять события, зависящие от пользовательского интерфейса, из ViewModel?

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

  • Допустим, у вашего ViewModel есть асинхронный метод, который вы хотите доставить результат в пользовательском интерфейсе.
  • Возьмите объект интерфейса вашего типа результата, который обеспечиваетВзаимодействие между ViewModel & Activity/Fragment в асинхронном методе с ViewModel передает LifeCycleOwner object и interface object в качестве параметра метода.
  • Теперь проверьте в своем методе события жизненного цикла вашего LifecycleOwner (т.е. здесь экземпляр действия или фрагмента) и предоставьте обратный вызов по интерфейсу в вашем пользовательском интерфейсе.
  • Итак, теперь вы можете пометить свойрезультат как null после доставки в пользовательский интерфейс.

Это немного настроек, но будет работать, когда вам нужно решение без LiveData.

...