【发布时间】:2021-04-09 16:11:28
【问题描述】:
如何在 Recycler 视图中实现 LiveData Observer?我有一个从另一个片段更新的全局变量“someDataChanged”。任何帮助将不胜感激!
class GlobalActivity {
companion object {
someDataChanged = MutableLiveData<Int>()
}
}
然后在 RecyclerView 的 Adapter.kt 中,我需要监听 someDataChanged。我有以下代码:
Adapter.kt
var mRecyclerView: RecyclerView? = null
class MainAdapter(val myResponse: MyResponse): RecyclerView.Adapter<CustomViewHolder>(){
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): CustomViewHolder {
//Error: this is not recognized.
GlobalActivity.someDataChanged`.observe(this, Observer{
println("Data Changed")
})
val layoutInflater = LayoutInflater.from(parent?.context)
val cellForRow = layoutInflater.inflate(R.layout.my_custom_cell, parent,false)
return CustomViewHolder(cellForRow)
}
override fun onBindViewHolder(holder: CustomViewHolder, position: Int) {
//some code
class CustomViewHolder(val view: View, var myPass: Passes? = null): RecyclerView.ViewHolder(view){
}
}
}
【问题讨论】:
-
你不应该在你的适配器中观察。而是从您的活动或片段中观察并将信息传递给适配器。
-
另外我不知道你的具体情况,但有一个
LiveData的单件似乎有点可怕......其次,即使你在适配器内部观察,onCreateViewHolder也不会做的地方。每次更改都会触发多次。 -
嗨,我如何将信息传递回适配器?我刚刚发布了这个问题:stackoverflow.com/questions/67024250/…。我无法让 recyclerView.adapter?.notifyDataSetChanged() 在 RecyclerView 上工作。我认为 LiveData 可能是一种解决方法。谢谢!
-
啊,我明白了。当没有其他可能的解决方案时,应该使用解决方法。我不建议在解决您的第一个问题之前实施解决方法。我会看看你的另一个问题。
标签: android kotlin android-recyclerview android-livedata