最近有一种情况,我经常在连接到recyclerview的viewholder中观察单击的视图。我试过设置onclick监听器,但对我来说不起作用。后来,对我有效的方法是将livedata传递给适配器,并在视图上执行click事件时将值传递给livedata。具体如下。,
// live data
val selectedItem: MutableLiveData<String> by lazy { MutableLiveData<String>() }
// passing to adapter
binding.myRecycler.adapter = myAdapter(elements, myViewModel.selectedItem)
// adapter
class myAdapter(
private val elements: List<Element>,
private val selectedItem: MutableLiveData<String>,
) : RecyclerView.Adapter<myViewHolder>() {
override fun onBindViewHolder(holder: myViewHolder, position: Int) {
val element = elements[position]
holder.card.setOnClickListener {
selectedItem.postValue(element.uid)
}
}
}
在stackoverflow的大多数问题上,我都没有看到有人推荐这种方式。
将实时数据传递给recyclerview适配器有哪些缺点?当我观察这些变化时,它正以我想要的方式工作。如果这不是正确的方法,那么解决这个问题的正确方法是什么?
我的目的是存储 uid
数据库适配器中已单击视图的个数,。
1条答案
按热度按时间e1xvtsh31#
我认为在android中使用viewmodel和livedata来点击事件不是个好主意。
因为在应用程序中使用更多的观察者并不好。
android中的viewmodel设计用于处理活动和片段,并在生命周期中使用它们。click事件是主线程进程,但post-in-live数据用于后台调用。
最简单的方法是使用回调。
但如果你使用kotlin开发android应用程序,你可以使用更高阶的函数。
我希望答案是正确的,对你有帮助