点击事件¶
函数 | 描述 |
---|---|
onClick | 添加指定Id点击事件 |
onLongClick | 添加指定Id长按事件 |
点击事件和长按事件都被局限于ItemViewDelegate,因此,即使两个ViewHolder中的view id一致,也不会被覆盖
Warning
尽量避免在onBind方法中设置点击事件,这回因为rv反复绑定数据造成不必要的开销
点击事件¶
val config = createNormalAdapterConfig<String> {
//添加ViewHolder
addItemView(R.layout.item_1) {
//...其余代码省略
//配置ViewHolder的点击事件,可传入多个视图的id设置点击事件
onClick(R.id.tv1, R.id.tv2) { v: View, holder: BaseViewHolder ->
//点击事件处理
}
}
// .....
}
长按事件¶
val config = createNormalAdapterConfig<String> {
//添加ViewHolder
addItemView(R.layout.item_1) {
//...其余代码省略
//配置ViewHolder的长按事件,可传入多个视图的id设置事件
onLongClick(R.id.tv1, R.id.tv2) { v: View, holder: BaseViewHolder ->
//事件处理
}
}
// .....
}
直接传递ItemViewDelegate类型的addItemView 点击事件和长按事件¶
val delegate1 = ItemViewDelegate<String>(R.layout.item_1)
.onBind { holder, data, pos ->
holder.getView<TextView>(R.id.tv1)?.text = data
}
//定义点击事件
.onClick(R.id.tv1) { v, h ->
Toast.makeText(applicationContext, "pos:${h.layoutPosition}", Toast.LENGTH_SHORT).show()
}
val config = createNormalAdapterConfig<String> {
//添加ViewHolder
addItemView(delegate1)//添加上面的ItemViewDelegate
// .....
}
多个ItemViewDelegate共享一个事件处理¶
这种方式下,不同ViewHolder中,如果View id一致,你需要从ViewHolder种获取data来判断该事件来自哪种ViewType
val config = createNormalAdapterConfig<String> {
//将事件独立出来
val click = ItemClickListener { view, holder ->
val data = holder.getBindData<String>()//从ViewHolder种获取绑定的数据
}
//添加ViewHolder
addItemView(layoutId = R.layout.test_item) {
//...省略其他代码
onClick(R.id.tv_1, R.id.tv_2, clickEvent = click)
}
//添加ViewHolder
addItemView(layoutId = R.layout.sample_item) {
//...省略其他代码
onClick(R.id.tv_3, R.id.btn_1, clickEvent = click)
}
// .....
}