【发布时间】:2020-03-10 18:52:03
【问题描述】:
我有一个加载产品列表的片段,然后我转到另一个片段,但是当我回来时,Resource.Loading 再次触发显示在我的进度条中
我正在使用导航组件,我知道我应该处理我的状态,但我的问题是这个。
我知道 livedata 将存储我的数据,然后当弹回到这个片段时,它会立即从 livedata 本身加载它,而不是再次检索它,但是,它也会在我的数据列表上方显示我的进度条,我知道那是因为我的 emit(Resource.Loading()) 来自我的 viewModel,但是...
如果我从另一个片段返回并重新创建此 onActivityCreated ,是否有办法不显示此进度或不发出 Loading 状态?
代码
我的片段
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
viewModel.fetchProductList()
.observe(viewLifecycleOwner, Observer {
when (it) {
is Resource.Loading -> {
showProgress()
}
is Resource.Success -> {
hideProgress()
landingAdapter.itemList = it.data
if (landingAdapter.itemCount == 0) {
Toast.makeText(
requireContext(),
"No items yet",
Toast.LENGTH_SHORT
).show()
}
landingAdapter.notifyDataSetChanged()
}
is Resource.Failure -> {
hideProgress()
}
}
})
}
视图模型
fun fetchProductList() = liveData(Dispatchers.IO) {
emit(Resource.Loading())
try{
val getProductList = repo.getProductList()
emit(getProductList)
}catch (e:Exception){
emit(Resource.Failure(e))
}
}
此时我认为在 popBackstack 上重新创建片段时再次发出 Resource.Loading() 再次向我显示我的进度对话框
我尝试过使用事件包装器,但它也一样
编辑
由于我使用的是 livedata-ktx ,我不想在我的视图模型构造函数中加载我的数据,而是我想在我的片段中只处理一次
谢谢
【问题讨论】:
标签: android kotlin mvvm android-viewmodel android-navigation