Как вы перешли к другому фрагменту в Android MVVM с LiveData на основе завершения эмиссии? - PullRequest
0 голосов
/ 06 апреля 2020

Я рефакторинг моего проекта Android Java (MVP, RxJava2) для использования MVVM и LiveData. Я прочитал все руководства по MVVM и LiveData, но, похоже, нет мнения о том, как обрабатывать такие вещи, как переход к другому фрагменту на основе завершения эмиссии из ViewModel. В MVP, как правило, презентатор содержит ссылку на представление, основанное на контракте интерфейса. Когда излучение Rx завершается, вы можете ссылаться на представление, чтобы перейти к другому фрагменту. Например:

.doOnComplete(() -> view.navigateToHome())

Большинство примеров с MVVM и LiveData в основном связаны с изменением пользовательского интерфейса. Конечно, вы можете установить LiveData и наблюдать за ним для навигации в другом месте:

// viewmodel  
.doOnComplete(() -> navigateHomeLiveData = true)

// fragment  
.observe(findNavController.navigate(action))

Но в этой статье говорится, что не следует делать это: LiveData с SnackBar, навигацией и другими событиями (случай SingleLiveEvent)

Далее в статье рекомендуется использовать пользовательский класс Event<T>, который не является частью какой-либо библиотеки и который мы должны создать вручную. Является ли это наиболее распространенным и общепринятым способом обработки таких вещей с помощью MVVM и LiveData?

...