7.如何给RecyclerView添加Click和LongClick事件

    xiaoxiao2021-03-25  270

    /** * 作者:Pich * 原文链接:http://me.woblog.cn/ * QQ群:129961195 * 微信公众号:woblog * Github:https://github.com/lifengsofts */

    详解RecyclerView系列文章目录

    概述

    如果你做Android开发,那么你肯定听过RecyclerView没有提供Click和LongClick事件的默认实现。不知道官方这是个什么用意,那么这节课程就来实现这个功能,实现完成的效果图如下图所示:

    这里我们不讲过分的封装,现在只是随便写,目的就是更容易懂。后面的到封装的课程会讲进一步的封装。

    添加OnItemClickListener

    public interface OnItemClickListener { void onItemClick(ViewHolder holder,int position); }

    添加一个接口,用来在adapter里面点击事件后回调到你需要的位置。

    在adapter中实现点击事件

    public void onBindViewHolder(final CardViewActivity.MyAdapter.MyViewHolder holder, final int position) { String d = CardViewActivity.this.data.get(position); holder.bindData(d, position); if (onItemClickListener != null) { holder.itemView.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { onItemClickListener.onItemClick(holder,position); } }); } }

    这里我们先判断onItemClickListener是否为空,然后在设置点击事假,这样比一上来就设置点击监听器,然后再点击事件里面在判断监听器是否为空更节省资源。

    处理点击事件

    接下来就可以在回调的方法里面处理点击事件了。

    String s = data.get(position); Intent intent = new Intent(this, NewsDetailActivity.class); intent.putExtra(NewsDetailActivity.URL, s); startActivity(intent, options.toBundle());

    长按事件也就很简单了,可以直接改上面的监听器,在添加一个方法,也可以在创建一个接口,我们这里再创建一个接口。

    创建OnItemLongClickListener

    public interface OnItemLongClickListener { boolean onItemLongClick(ViewHolder holder,int position); }

    特别注意的是我们在回调中传入了ViewHolder,这样的好处是,我们在点击事件里面就可以拿到相应的view,可以直接执行一些动画,不用再次拿到View在findViewById了。

    处理长按事件

    这个没必要多说了,大家基本都会,但是要注意的是onItemLongClick有返回值,他根据返回时判断是否在调用OnItemClick,所以这个地方一定要根据实际情况返回不同的值。

    @Override public boolean onItemLongClick(ViewHolder holder, int position) { Toast.makeText(this, "Long Click", Toast.LENGTH_SHORT).show(); return true; }
    转载请注明原文地址: https://ju.6miu.com/read-43.html

    最新回复(0)