Mah*_*Tag 1 android kotlin android-livedata android-viewmodel
我正在使用导航底部与导航底部ViewModel内的所有片段共享,但它在第二次调用片段时抛出此异常
java.lang.IllegalArgumentException: Cannot add the same observer with different lifecycles
我试图让所有观察者都附加到活动而不是它的片段,如下所示
1-在fragemt中声明viewModel
viewModel = activity?.run {
ViewModelProviders.of(this,viewModelFactory).get(SharedViewModel::class.java)
} ?: throw Exception("Invalid Activity")
Run Code Online (Sandbox Code Playgroud)
2-观察者实时数据对象
viewModel.msg.observe(activity!!, Observer {
Log.i(TAG,it)
})
Run Code Online (Sandbox Code Playgroud)
3- 移除观察者
override fun onStop() {
super.onStop()
viewModel.msg.removeObservers(activity!!)
}
Run Code Online (Sandbox Code Playgroud)
这段代码对我来说工作正常,但我想知道我的代码是否正确并且可能工作?提前致谢
这是我们在片段中使用实时数据时常犯的错误。在片段上使用this/activity可以重复。您应该viewLifecycleOwner用于片段中的实时数据观察。
viewModel.msg.observe(viewLifecycleOwner, Observer {
Log.i(TAG,it)
})
Run Code Online (Sandbox Code Playgroud)
有关更多信息,请阅读本文https://medium.com/@cs.ibrahimyilmaz/viewlifecycleowner-vs-this-a8259800367b
您不需要手动移除观察者。
| 归档时间: |
|
| 查看次数: |
6090 次 |
| 最近记录: |