【发布时间】:2020-09-05 23:09:30
【问题描述】:
我有一个负载更多的回收器视图,但我无法将值存储在数据库中。因此,当我加载数据时,一切正常。当我导航到另一个片段并单击 onBackPressed 时,会出现问题,再次调用观察者的 onChanged,它为我提供了从 API 调用的最后一个值。然后正如您在下面的代码中看到的那样,它们会自动添加到列表中并在 UI 中发布
productsViewModel.productsObject.observe(viewLifecycleOwner, Observer { result ->
if (result.status != Status.LOADING) {
(activity as MainActivity?)!!.dismissProgressDialog(getView())
if (result.status == Status.SUCCESS && result.data != null) {
val productsResult = parseObject(result.data.asJsonObject)
if (!productsResult.isNullOrEmpty()) {
products.addAll(productsResult)
productAdapter.submitList(products)
progressBar.visibility = View.GONE
numberSearch.text = products.size.toString() + "/" + total + " " + resources.getString(R.string.items_found)
} else if (result.status == Status.ERROR) {
if (result.message.isNullOrBlank())
Utils.showSnackBar(requireContext(), view, getString(R.string.something_wrong_try_again), true)
else
Utils.showSnackBar(requireContext(), view, result.message, true)
}
}
}
})
【问题讨论】:
-
onChanged 将在碎片恢复时使用 LiveData 中的先前值调用。您可以做的一件事是在 LiveData 的 getter 中,您可以清除它并返回。这样每次调用 observe 时都会得到一个新的 LiveData。
-
如何清除liveData?
-
在您的实时数据获取器中,在您返回实时数据之前,使用
livedata = MutableLiveData()重新初始化它,以便您收到新的实时数据。 -
好主意让我试试。昨天晚上我从转换切换到使用 MutableLiveData
标签: android kotlin mvvm viewmodel observers