在recyclerview适配器中使用viewmodel的实时数据

vfwfrxfs  于 2021-08-20  发布在  Java
关注(0)|答案(1)|浏览(763)

最近有一种情况,我经常在连接到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 数据库适配器中已单击视图的个数,。

e1xvtsh3

e1xvtsh31#

我认为在android中使用viewmodel和livedata来点击事件不是个好主意。
因为在应用程序中使用更多的观察者并不好。
android中的viewmodel设计用于处理活动和片段,并在生命周期中使用它们。click事件是主线程进程,但post-in-live数据用于后台调用。
最简单的方法是使用回调。
但如果你使用kotlin开发android应用程序,你可以使用更高阶的函数。
我希望答案是正确的,对你有帮助

相关问题