android - 如何从 RecyclerView 适配器的 ViewModel 中获取价值
问题描述
我在 MVVM 结构中有一个 Android 项目。在该项目中,包括 RecyclerView。这是我的代码。
1.MyViewModel.kt
class MyViewModel(context: Application, val myRepository: MyRepository) : AndroidViewModel(context), Observable{
... other code ...
val listUri: MutableLiveData<MutableList<Uri>> by lazy {
MutableLiveData<MutableList<Uri>>().apply {
value = mutableListOf()
}
}
... other code ...
}
2.MyAdapter.kt
class MyAdapter(var items: MutableList<Uri>, val context: Context) : RecyclerView.Adapter<ViewHolder>() {
var listItems: ArrayList<Uri> = items as ArrayList<Uri>
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
return ViewHolder(LayoutInflater.from(context).inflate(R.layout.pod_list_item, parent, false))
}
override fun onBindViewHolder(holder: ViewHolder, position: Int) {
holder.imageIcon.setImageURI(listItems[position])
holder.deleteIcon.setOnClickListener {
val viewModel: MyViewModel? = null
....THIS PART....
viewModel?.listUri?.value.removeAt(position)
....UNTIL THIS PART....
}
}
override fun getItemCount(): Int {
return editedItems.size
}
}
class ViewHolder(val view: View) : RecyclerView.ViewHolder(view) {
var imageIcon = view.icon_image
var deleteIcon = view.icon_delete
}
当用户单击 recyclerview 项目中的删除图标时,应用程序假设删除其中 name的选定值MutableLiveData<MutableList<Uri>>
。MyViewModel
listUri
在我上面标记的代码中,当我调试代码时,它返回空值,即使 ViewModel 中的变量 listUri 具有值。所以我认为,我从 Adapter 访问 ViewModel 值的方式是错误的。
如何从适配器访问 ViewModel 的值然后对其进行操作?
如果不能这样做,任何建议都会很好。
解决方案
我猜不是在构造函数中传递上下文,而是传递 ViewModel:
class MyAdapter(var items: MutableList<Uri>, val viewModel: MyViewModel) : RecyclerView.Adapter<ViewHolder>()
然后代替:
holder.deleteIcon.setOnClickListener {
val viewModel: MyViewModel? = null
....THIS PART....
viewModel?.listUri?.value.removeAt(position)
....UNTIL THIS PART....
}
你可以做:
holder.deleteIcon.setOnClickListener {
viewModel.listUri.value?.removeAt(position)
}
我希望这有帮助
推荐阅读
- javascript - 文本和输入不在同一行
- swift - 快速从 MKLocalSearch 对象中检索第一个“mapItem”元素
- javascript - 需要在浏览器中通过 Flash 应用程序捕获和解析 json 响应
- javascript - 返回未定义的对象条目
- python - 尝试从类中返回变量会返回一个函数对象
- c++ - 使用递归查找数组c ++的最大值和最小值而不更改函数
- matplotlib - 在 Matplotlib/Seaborn 图中累积的热图颜色条
- docker - Dockerfile-dev 与 Dockerdev-prod
- flowtype - 流程:无法调用“this.state.gameBoard.map”,因为未定义中缺少属性“map”
- sql - 如何仅从嵌套for循环中的变量中获取最大值