我在导航组件中使用共享的ViewModel,而不是为每个片段创建一个ViewModel(主要是因为它更容易),但是现在当我重新输入一个片段并订阅该片段的ViewModel实时数据时遇到了一个问题,我也得到了最后一个状态。
这是ViewModel代码:
val apiLessonData: MutableLiveData<String>> = MutableLiveData()
fun getLessonsUserCreated() =
apiCall(MyMaybeObserver(apiLessonData))
在MyMaybeObserver中,我有这样的东西:
override fun onSuccess(t: T) {
apiDataObserver.postValue(t)
}
这就是我在片段中的观察方式:
private val apiAddGoalData = Observer<String> { response ->
showSnack(response)
}
override fun onCreateView(
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
.
.
viewModel.apiAddGoalData.observe(viewLifecycleOwner, apiAddGoalData)
.
.
}
现在第一次输入时效果很好,但是第二次打开时,它显示了上一个时间的零食,如何停止,而不创建新的ViewModel?
以简单的方式,您可以在以观察者的MutableLiveData
方法获取数据后为onchange
设置null。有关更多信息,您可以阅读本文:livedata-with-snackbar-navigation-and-other-events-the-singleliveevent-case。您也可以看到此问题可能会对您有所帮助:How to clear LiveData stored value?