RecylerView是谷歌在2014年推出来的新的一个列表控件,通过这个可以自由设置横向或者纵向的ListView以及GridView。总之功能十分强大,但是不知道为什么谷歌并没有实现OnItemClick的监听功能。
网上目前有两种实现方式,第一种是直接在Adapter的onBindViewHolder方法里实现,第二种是在ViewHolder里面实现。
今天我们采用第三种方式,直接在RecylerView内部实现,这样可以不用依赖于ViewHolder和Adapter,使得代码扩展性增强。下面上代码吧。
首先我们要继承RecylerView并定义一个接口:
public interfere OnItemClickListener{
public void itemClick(View v,int position);
}
然后在RecylerView里面定义OnItemClickListener:
private OnItemClickListener mOnItemClickListener;
public void setOnItemClickListener(OnItemClickListener mOnItemClickListener) {
this.mOnItemClickListener = mOnItemClickListener;
}
接着我们需要重写drawChild这个方法:
@Override
protected boolean drawChild(Canvas canvas, final View child,long drawingTime) {
final int position = getChildPosition(child);
child.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (mOnItemClickListener != null) {
mOnItemClickListener.itemClick(v,position);
}
}
});
return super.drawChild(canvas, child, drawingTime);
}
这样,自定义的ItemClick就实现了。