我们都知道RecyclerView不像Listview那样搭配有点击和长按监听,但是这并难不倒灵活的Recyclerview。
实现点击监听的思路大概是这样:
在Recyclerview相关的Adapter里面,写一个内部监听接口,接口里面写一个点击方法。然后在Adapter定义一个空的监听接口,另外在Adapter里面写一个点击设置公共方法,这个方法是供Recyclerview调用的,也就是,如果需要实现点击功能,那么Recyclerview就要调用这个方法,所以这个方法需要一个参数,这个参数正是监听接口本身,这样我们就可以在传入这个参数的时候new一个接口去实现里面的点击方法了。当我们实现这个点击接口后,这个接口是需要赋给Adapter里面定义一个那个空接口的,这样我们就可以在onBindView里面判断这个空接口了,如果接口为空,那我们不处理事件,如果接口不为空,那么我们就处理我们想要做的事,比如点击效果。需要注意的是,在Recyclerview实现监听接口的时候,会在Adapter中创建接口,并且判断接口是否为空,然后实现事件处理,以及接口方法的调用,如果在adapter中不进行监听接口方法的调用,那么recyclerview里面的点击处理事件是不能响应的。
代码如下:
public class RcAdapter extends RecyclerView.Adapter<RcAdapter.MyViewHolder> { private LayoutInflater layoutInflater; private String[] serviceType; private Context context; private OnItemClickListener onItemClickListener = null; public RcAdapter(Context contexts,String[] serviceType){ Log.e("eee", "eww"); this.serviceType = serviceType; this.context = contexts; layoutInflater = LayoutInflater.from(this.context); } @Override public MyViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { View view = layoutInflater.inflate(R.layout.item_service_type,parent,false); MyViewHolder myViewHolder = new MyViewHolder(view); return myViewHolder; } @Override public void onBindViewHolder(MyViewHolder holder, int position) { holder.typeTv.setText(serviceType[position]); } @Override public int getItemCount() { Log.e("eee",serviceType.length + ""); return serviceType.length; } public void setOnItemClickListener(OnItemClickListener onItemClickListener){ this.onItemClickListener = onItemClickListener; } public class MyViewHolder extends RecyclerView.ViewHolder{ TextView typeTv; public MyViewHolder(View itemView) { super(itemView); typeTv = (TextView)itemView.findViewById(R.id.it_service_type_name); } } public interface OnItemClickListener{ void onItemClick(); } }其他的无关紧要的代码就自己写吧,世间没有完美的demo。。不过,后续我会上传到github里面,到时更新吧