【发布时间】:2022-01-10 19:38:33
【问题描述】:
我找到的所有资源都使用 Java 或仅涵盖单击列表项本身而不是列表项内部的视图。我相信我应该在 ViewHolder 类中设置它,但我不确定如何设置。这是我的 ViewHolder 类。
class ItemListAdapter(val clickListener : ItemListListener) : ListAdapter<Item , ItemListAdapter.ItemViewHolder>(DiffCallback) {
class ItemViewHolder(private var binding : ItemListItemBinding) :
RecyclerView.ViewHolder(binding.root) {
fun bind(item : Item, clickListener : ItemListListener) {
binding.item = item
binding.clickListener = clickListener
// button that inside listItem that I want to respond to clicks
// binding.addOneButton ???????
binding.executePendingBindings()
}
}
还有我的听众
class ItemListListener(val clickListener : (singleItem : Item) -> Unit) {
fun onClick(item : Item){
clickListener(item)
}
}
其他相关的方法调用
override fun onBindViewHolder(holder : ItemViewHolder , position : Int) {
val item = getItem(position)
holder.bind(item, clickListener)
}
companion object DiffCallback : DiffUtil.ItemCallback<Item>() {
override fun areItemsTheSame(oldItem : Item , newItem : Item) : Boolean {
return oldItem == newItem
}
override fun areContentsTheSame(oldItem : Item , newItem : Item) : Boolean {
return oldItem.itemId == newItem.itemId
}
}
override fun onCreateViewHolder(
parent : ViewGroup ,
viewType : Int
) : ItemViewHolder {
return ItemViewHolder(ItemListItemBinding.inflate(LayoutInflater.from(parent.context)))
}
【问题讨论】:
-
什么是
binding.clickListener?你的 XML 中有这个名字的东西吗? -
这是我上面第二个代码组中的 ItemListListener。
-
我的意思是你是如何在你的 XML 中使用它的?有没有设置成xml按钮的
onClick属性? -
设置为
onClick,用于列表项的根视图,一个ConstraintLayout。 -
你想要两个点击监听器吗?一个用于根视图,一个用于
addOneButton?
标签: android kotlin android-recyclerview android-databinding