设置recyclerviewitem的点击事件,想偷懒,就直接在onBindViewHolder里,获取itemview然后setonclicklistener就完事了。
如果想优雅一点,就用下边这种
给recyclerview添加一个touchlistener
rv.addOnItemTouchListener(ItemTouchListenerRV(rv))
简单的实现如下,不过这种设置完
可能发现你给item设置了状态背景,可item的背景不会改变,
其实很简单,在item的跟布局上加上如下属性即可android:clickable="true"
import android.support.v7.widget.RecyclerView;
import android.view.GestureDetector;
import android.view.MotionEvent;
import android.view.View;
/**
* Created by charlie.song on 2018/5/8.
*/
public class RvItemTouchListener extends RecyclerView.SimpleOnItemTouchListener {
GestureDetector gestureDetector;
RecyclerView rv;
public RvItemTouchListener(RecyclerView rv) {
this.rv = rv;
gestureDetector = new GestureDetector(rv.getContext(), gestureListener);
}
@Override
public boolean onInterceptTouchEvent(RecyclerView rv, MotionEvent e) {
return gestureDetector.onTouchEvent(e);
}
@Override
public void onTouchEvent(RecyclerView rv, MotionEvent e) {
super.onTouchEvent(rv, e);
gestureDetector.onTouchEvent(e);
}
private GestureDetector.SimpleOnGestureListener gestureListener = new GestureDetector.SimpleOnGestureListener() {
@Override
public boolean onSingleTapUp(MotionEvent e) {
View child = rv.findChildViewUnder(e.getX(), e.getY());
if (child != null) {
int position = rv.getChildAdapterPosition(child);
if (listener != null) {
listener.singleTab(position, rv.getChildViewHolder(child));
}
}
return super.onSingleTapUp(e);
}
@Override
public void onLongPress(MotionEvent e) {
super.onLongPress(e);
}
};
public RvItemClickListener listener;
public interface RvItemClickListener {
void singleTab(int position, RecyclerView.ViewHolder viewHolder);
void longPress(int position);
}
}
网友评论