【发布时间】:2020-12-17 06:08:12
【问题描述】:
当我点击一个视图时,它会修改在 Fragment 中观察到的 X。我需要将点击的视图传递给 viewmodel.X.observe() 方法。我无法在 OnItemClickListener 中设置 viewmodel.X.observe,因为它会在每次单击项目时尝试创建新的观察者。将单击的项目传递给 viewmodel.observe 方法的最佳方法是什么?是否正在创建一个全局变量来保存仅单击项目的选项?
片段代码:
lateinit var viewClicked: View
val itemClickListener =
(object : OnItemClickListener<View> {
override fun onItemClicked(item: View) {
viewClicked = item
//do something else
}
})
viewModel.signalStatus.observe(viewLifecycleOwner, {
//Is viewClicked global my only option to be able to access here?
// I can't have this observer inside my click listener as it will trigger this multiple times when user clicks on view
if (viewClicked == btnView) {
//do something
}
})
【问题讨论】:
-
ViewModel 不应该持有视图。在使用 ViewModel 之前,最好了解更多关于 MVVM architecture 的信息。或在 youtube 上观看一些连续剧。
-
@MRazaImtiaz 上面的代码在片段而不是视图模型中。
-
你不能那样做,你想通过视图达到什么目的?通常的方法是观察 X 并通过点击监听器更改 X 的值,然后
observe block中的代码将被执行 -
你可以试试接口回调函数
标签: android kotlin viewmodel observer-pattern