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

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

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/stonezry/article/details/106112471