Переход между состояниями UI при использовании архитектуры MVVM

Всем привет! Мне необходимо сделать UI с различными состояниями, обозначу их, допустим, как состояние 1, 2, 3 и 4. Переход не одиночный, то есть из состояния 1 можно попасть не только в состояние 2, а ещё и в какое-нибудь другое, аналогично с остальными состояниями. В своём приложении использую архитектуру MVVM. У меня возник вопрос - каким образом построить такую систему состояний? Какими-нибудь способами добавлять тип нового состояния и оповещать о нём мой View из моего ViewModel? Или, стоит смотреть в сторону реализации State Machine (конечного автомата состояний)? Очень жду любых советов.


Ответы (1 шт):

Автор решения: Sergei Buvaka

Вы можете воспользоваться sealed class

Например:

sealed class State {
    object Loading : State()
    class Error(throwable: Throwable) : State((
    class OnDataRecieve (data:List<YorData>) : State()
}

Класть этот State в вашу LiveData. Например:

//в начале загрузки
liveData.post(State.Loading)

//Ошибка
liveData.post(State.Error(NullPointerException())

// И т.д.

А в уже в вашей View там где вы прописываетесь на LiveData, вы просто пишете:

when(state){
    is Loading -> onDataLoading()
    is Error -> onError(state.throwable) 
    // И т.д.
}
→ Ссылка