Android:RecyclerView內嵌套RecyclerView導致外層item點擊不響應

我是用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);
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章