android livedata сброc наблюдения
Допустим имеется 2 кнопки 1. открывает Fragment (Файловый проводник) 2. загружает файл, если загрузился state = LOADED_FILE
Мы загрузили файл, state = Loaded_file. Затем мы открываем фрагмент и сразу возвращаемся на первичное окно. И пробрасывается снова статус Loaded file, который меняет некоторый UI.
Как можно избавиться от этой проблемы? Вариант есть после изменения состояние на UPLOAD_FILE, сразу ставить ему state на null, чтобы сбросить.
Есть другие варианты?
Сейчас сбрасываю так
viewModel.state.observe(viewLifecycleOwner, Observer {
Log.d("Состояние", it.name)
when(it){
CheckCheckState.LOADING_FILE -> {
tl_check_url.isEnabled = false
btn_load_check.text = "Загрузка чека...."
btn_load_check.isEnabled = false
btn_load_check_url.isEnabled = false
}
CheckCheckState.LOADING_FILE_URL -> {
tl_check_url.isEnabled = false
btn_load_check_url.text = "Загрузка чека...."
btn_load_check.isEnabled = false
btn_load_check_url.isEnabled = false
}
CheckCheckState.INTERNET_ERROR -> {
view?.let{
Snackbar.make(view!!, "Интернет не доступен", Snackbar.LENGTH_SHORT).show()
tl_check_url.isEnabled = true
btn_load_check.text = "Загрузить чек"
btn_load_check_url.text = "Загрузить чек по ссылке"
btn_load_check.isEnabled = true
btn_load_check_url.isEnabled = true
}
}
CheckCheckState.FATAL_ERROR -> {
view?.let{
Snackbar.make(view!!, viewModel.errorMessage, Snackbar.LENGTH_SHORT).show()
tl_check_url.isEnabled = true
btn_load_check.text = "Загрузить чек"
btn_load_check_url.text = "Загрузить чек по ссылке"
btn_load_check.isEnabled = true
btn_load_check_url.isEnabled = true
viewModel.errorMessage = ""
}
}
CheckCheckState.ERROR -> {
view?.let{
Snackbar.make(view!!, viewModel.errorMessage, Snackbar.LENGTH_SHORT).show()
tl_check_url.isEnabled = true
btn_load_check.text = "Загрузить чек"
btn_load_check_url.text = "Загрузить чек по ссылке"
btn_load_check.isEnabled = true
btn_load_check_url.isEnabled = true
viewModel.errorMessage = ""
}
}
CheckCheckState.LOADED_FILE -> {
view?.let{
Snackbar.make(view!!, "Файл загружен", Snackbar.LENGTH_SHORT).show()
tl_check_url.isEnabled = true
btn_load_check.text = "Загрузить чек"
btn_load_check_url.text = "Загрузить чек по ссылке"
btn_load_check.isEnabled = true
btn_load_check_url.isEnabled = true
viewModel.errorMessage = ""
}
}
CheckCheckState.LOADED_URL -> {
view?.let{
Snackbar.make(view!!, "Файл загружен по ссылке", Snackbar.LENGTH_SHORT).show()
tl_check_url.isEnabled = true
btn_load_check.text = "Загрузить чек"
btn_load_check_url.text = "Загрузить чек по ссылке"
btn_load_check.isEnabled = true
btn_load_check_url.isEnabled = true
viewModel.errorMessage = ""
}
}
}
viewModel.setState(null)
})