繁体   English   中英

在 RecyclerView Adapter 中使用 ViewModel 的实时数据

[英]Using ViewModel's live data in a RecyclerView Adapter

最近有一种情况,我一直在观察附加到 RecyclerView 的 ViewHolder 中的单击视图。 我曾尝试设置 onclick 侦听器,但对我而言,它不起作用。 后来对我有用的是将实时数据传递给适配器,并在视图上发生单击事件时将值发布到实时数据。 如下,

// 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存储到数据库中。

我认为在 android 中使用 viewModel 和 liveData 单击事件不是一个好主意。
因为在应用程序中使用更多的观察者不好。
android 中的 viewModel 设计用于处理活动和片段,并使用它们的生命周期。 单击事件是主线程进程,但实时数据中的发布用于后台调用。

最简单的方法是使用回调
但是如果您使用 kotlin 开发 android 应用程序,您可以使用高阶函数

我希望答案是真实的并能帮助你

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM