我是用BaseRecyclerViewAdapterHelper時,recyclerView嵌套一個顯示圖片的recyclerView,外層recyclerView需要響應item的點擊進行跳轉,在嵌套的RecyclerView中點擊無效。沒用原生的Adapter寫過,不知道會不會響應。
首先,需要知道觸摸事件的響應機制是怎麼樣的:由上至下,最下層不消費後,則由下至上;然後需要了解一下這三個方法:dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent。
dispatchTouchEvent:事件分發,一般不處理,返回false,事件到onInterceptTouchEvent中處理。
onInterceptTouchEvent:事件攔截,返回true的話,則不向下傳遞,事件到onTouchEvent,返回false事件往下傳遞
onTouchEvent:返回true代表事件消費,返回false不消費,事件往上傳遞。
那麼在我只需要內部RecyclerView用於顯示,不需要任何操作的情況下,爲了使外層RecyclerView的item響應,把嵌入的RecyclerView觸摸事件攔截,並且不消費就行了,事件就會傳遞到上一層,重寫嵌套的RecyclerView。
public class NoTouchRecyclerView extends RecyclerView {
public NoTouchRecyclerView(Context context) {
super(context);
}
public NoTouchRecyclerView(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public NoTouchRecyclerView(Context context, @Nullable AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean onTouchEvent(MotionEvent e) {
return false;
}
@Override
public boolean onInterceptTouchEvent(MotionEvent e) {
return true;
}
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
return super.dispatchTouchEvent(ev);
}
}