RecyclerView详解(三):点击事件

我们知道ListView 有提供像setOnItemClickListener()和setOnItemLongClickListener()这样的点击事件,可以直接使用,但是RecyclerView没有提供,所以很明显,我们得自己写接口回调。确切的说,是在adapter里面写接口回调。 其实思路就是直接用在itemview里面设置setOnClickListener()即可。

首先是定义回调接口

interface OnItemClickListener {
   fun onItemClick(view: View?, holder: RecyclerView.ViewHolder?, position: Int)
   fun onItemLongClick(view: View?, holder: RecyclerView.ViewHolder?, position: Int): Boolean
}

然后在adpter里面设置方法

var mOnItemClickListener: OnItemClickListener? = null
fun setOnItemClickListener(onItemClickListener: OnItemClickListener?) {
   mOnItemClickListener = onItemClickListener
} 

这里要注意一下,回调的操作一般建议在onCreateViewHolder方法里面执行,如下

 override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): HomeViewHolder {
       val itemView: View = LayoutInflater.from(this@RecyclerviewActivity)
           .inflate(R.layout.item_rv_txt, parent, false)

       val holder = HomeViewHolder(itemView)
       itemView.setOnClickListener { v ->
           mOnItemClickListener?.onItemClick(v, holder, holder.adapterPosition)
       }
       itemView.setOnLongClickListener(View.OnLongClickListener { v ->
           if (mOnItemClickListener != null) {
               return@OnLongClickListener mOnItemClickListener!!.onItemLongClick(v, holder, holder.adapterPosition)
           }
           false
       })

       return holder
   }

之后在Actviity里面设置回调监听,那么点击事件的设置就ok搞定了。

    recyclerview.layoutManager = LinearLayoutManager(this)
    recyclerview.addItemDecoration(MyItemDecoration(this, RecyclerView.VERTICAL))
    recyclerview.itemAnimator = DefaultItemAnimator()
    homeAdapter = HomeAdapter()
    recyclerview.adapter = homeAdapter
    homeAdapter!!.setOnItemClickListener(object : OnItemClickListener {
        override fun onItemClick(view: View?, holder: RecyclerView.ViewHolder?, position: Int) {

            Toast.makeText(this@RecyclerviewActivity, "点击第" + position + "个", Toast.LENGTH_SHORT).show()
        }

        override fun onItemLongClick(view: View?, holder: RecyclerView.ViewHolder?, position: Int): Boolean {
            Toast.makeText(this@RecyclerviewActivity, "长按第" + position + "个", Toast.LENGTH_SHORT).show()
            return true
        }
    })

git地址:https://gitee.com/stonezry/AndroidDemo

欢迎关注本人公众号和小程序,谢谢
在这里插入图片描述

在这里插入图片描述

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值