之前写RecyclerView的子项点击,基本上都是在 onBindViewHolder 方法中拿到itemView就直接设置点击监听并回调出去了,都是为了快速实现功能,没想过在滑动过程中会重复去调用设置监听的方法。
子项的点击监听还是有更好的方式来处理的。
上代码:
class DemoAdapter( private val dataList: List<String>, private val onClickListener: (String) -> Unit ) : Adapter<DemoAdapter.ViewHolder>() { class ViewHolder(itemBinding: ItemDemoBinding, positionClick: (Int) -> Unit ) : RecyclerView.ViewHolder(itemBinding.root){ val tvDemoText = itemBinding.idTvDemo init { itemBinding.root.setOnClickListener { positionClick(adapterPosition) } } } override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { return ViewHolder(ItemDemoBinding.inflate(LayoutInflater.from(parent.context),parent,false)){ onClickListener(dataList[it]) } } override fun onBindViewHolder(holder: ViewHolder, position: Int) { holder.tvDemoText.text = dataList[position] } override fun getItemCount(): Int { return dataList.size } }
将点击监听的方法放在ViewHolder中去,方法就只在创建ViewHolder的时候才设置,这样就不像在 onBindViewHolder 方法中设置,会重复地调用。