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