/**
* 作者: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;
}