Я делаю приложение на основе базы данных TMDB. У меня есть recyclerView, в котором загружены новейшие телешоу. Когда я нажимаю на плакат, я вызываю API TMDB, получаю объект с информацией о шоу и открываю фрагмент, загруженный с данными этого объекта.
Дело в том, что я go возвращаюсь и нажимаю на другом телевизоре show, когда фрагмент открывается снова, он кратко показывает информацию о предыдущем телешоу, которое я щелкнул.
Я думаю, проблема в том, что я использую liveata для передачи данных между моделью просмотра и фрагментом, и это загрузка данных уже в liveata. Итак, я использую это, чтобы немного задержать открытие фрагмента:
HomeFragment - OnCLick
viewmodel.getShowDetails(showId)
val mHandler = Handler()
val monitor = Runnable {
Navigation.findNavController(view)
.navigate(HomeFragmentDirections.actionHomeToShowDetail())
}
mHandler.postDelayed(monitor, 300)
ViewModel
private var showMutable = MutableLiveData<ShowDetails>()
fun getShowData(id: Int) {
TmdbRepository.getDetails(id) // This returns an RxJava Observable
.observeOn(Schedulers.io())
.doOnError(Throwable::printStackTrace)
.subscribe {
showMutable.postValue(it)
}
}
fun getShow(): LiveData<ShowDetails> {
return showMutable
}
ShowDetailFragment
override fun onCreateView(
viewModel.getShow().observe(viewLifecycleOwner, Observer {
mShow = it
setData(mShow) // this fills the textviews, images, etc
})
}
Хорошо ли пользоваться этим методом? Или, может быть, мне следует использовать что-то еще для передачи данных между фрагментом и моделью просмотра вместо живых данных?
Спасибо.