【发布时间】:2020-07-14 10:22:37
【问题描述】:
我正在制作一个基于 TMDB 数据库的应用程序。我有一个加载了最新电视节目的 recyclerView。当我点击一张海报时,我会调用 TMDB api,获取一个带有显示信息的对象并打开一个加载了该对象数据的片段。
问题是当我返回并点击其他电视节目时,当片段再次打开时,它会简要显示我点击的上一个电视节目的信息。
我认为问题在于我正在使用 livedata 在 viewmodel 和片段之间传递数据,并且它正在加载 livedata 中已经存在的数据。 所以我用这个来延迟片段的打开:
HomeFragment - OnCLick
viewmodel.getShowDetails(showId)
val mHandler = Handler()
val monitor = Runnable {
Navigation.findNavController(view)
.navigate(HomeFragmentDirections.actionHomeToShowDetail())
}
mHandler.postDelayed(monitor, 300)
视图模型
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
}
显示DetailFragment
override fun onCreateView(
viewModel.getShow().observe(viewLifecycleOwner, Observer {
mShow = it
setData(mShow) // this fills the textviews, images, etc
})
}
用这种方法好不好?或者也许我应该使用其他东西在片段和视图模型之间传递数据而不是 livedata?
谢谢。
【问题讨论】:
标签: java android kotlin mvvm android-livedata