button - SetOnClickListener 用于 RecyclerView 中的 Button 以访问 viewmodel 并对房间数据库执行操作
问题描述
我想在 RecyclerView 中添加一个“删除”按钮,显示房间数据库中存在的“用户”列表。单击按钮时,该按钮应允许删除单个用户。我试图在 Myviewholder 中插入一个函数,但是当我在 OnBindViewHolder 中调用它时,错误涉及 mUserViewModel 的初始化。你有什么建议吗?这是适配器:
class ListAdapterUser: RecyclerView.Adapter<ListAdapterUser.MyViewHolder>() {
private var UserList = emptyList<User>()
private lateinit var mUserViewModel: UserViewModel
class MyViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) {
val button = itemView.findViewById<Button>(R.id.deleteoption)
fun deleteitem(item: User, viewModel: UserViewModel){
button.setOnClickListener{
viewModel.deleteUser(item)
}}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
return MyViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.custom_rowUser, parent, false))
}
override fun getItemCount(): Int {
return UserList.size
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
val currentItem = UserList[position]
holder.itemView.textview_valueUser.text = currentItem.Uservalue.toString()
holder.deleteitem(currentItem, mUserViewModel)
}
fun setUserData(User: List<User>){
this.UserList = User
notifyDataSetChanged()
}
}
谢谢!
解决方案
解决了通过 setUserData 函数获取在片段中初始化的视图模型。这里是最终代码:
class ListAdapterUser: RecyclerView.Adapter<ListAdapterUser.MyViewHolder>() {
private var UserList = emptyList<User>()
private lateinit var mUserViewModel: UserViewModel
class MyViewHolder(itemView: View): RecyclerView.ViewHolder(itemView) {
val button = itemView.findViewById<Button>(R.id.deleteoption)
fun deleteitem(item: User, viewModel: UserViewModel){
button.setOnClickListener{
viewModel.deleteUser(item)
}}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): MyViewHolder {
return MyViewHolder(LayoutInflater.from(parent.context).inflate(R.layout.custom_rowUser, parent, false))
}
override fun getItemCount(): Int {
return UserList.size
}
override fun onBindViewHolder(holder: MyViewHolder, position: Int) {
val currentItem = UserList[position]
holder.itemView.textview_valueUser.text = currentItem.Uservalue.toString()
holder.deleteitem(currentItem, mUserViewModel)
}
fun setUserData(User: List<User>, viewModel: UserViewModel)){
this.UserList = User
this.mUserViewModel = viewModel
notifyDataSetChanged()
}}
推荐阅读
- ios - 在 Swift 中将 CLLocation 转换为 MKMapItem
- ruby - Appium + Watir + Chromedriver 处理命令时出现未知的服务器端错误
- html - bootstrap 4 导航栏在左侧和右侧有填充
- java - Docker 和 Java - 从当前终端窗口读取和写入
- c# - 在 MassTransit 中为 .Net Core 2.2 实施 IHealthCheck
- shell - VSCode 集成终端参数:当前文件名
- python - 将字母列表转换为数字列表
- python - 自定义 CNN mini-batch (Keras, TF) 以避免在训练/测试中重复测量
- assembly - ARM STR 到 .data 中的变量
- javascript - 平移 z 维度时,纹理从平面网格中消失