1. 程式人生 > >RecyclerView父元件和子元件點選衝突問題解決

RecyclerView父元件和子元件點選衝突問題解決

嘛嘛...遇到的問題是這樣的,我仿照微信的長按點選顯示放大文字效果對TextView(定製)設定了長按點選事件,然後在RecyclerView中使用了這個元件,然後對RecyclerView的每一個item設定了點選事件,然後就出現了點選衝突的問題.這種問題真的不太想網上搜索解決方法,因為很多人水平比我還差= =,所以想著自己解決= =,實現的思路也是很簡單,但是要考慮到以後出現同樣的問題該怎麼辦,所以還是嗯...不僅僅解決這個問題本身吧.

說真的,介面真的是一個好東西.

首先,我使用的框架所有元件都實現了這樣一個介面

public interface ICustomView {

    void isBlind(boolean isBlind);

}

這個介面中包含了對於每個元件的屬性的描述,面向介面程式設計嘛= =.另外屬性就不顯示了,因為我很懶= =,姑且當這個介面只有一個方法吧.

然後每個元件都要實現這樣一個方法,傳入的引數用來判定元件是否會對事件起反應.Blind的意思即為是否是真瞎.

事件分發機制就不詳細講了,網上的講解也很多,把簡單的事情講的雲裡霧裡的很多,講的不錯的也很多.

這裡我還是打算使用很暴力的方法,因為子元件一旦消費的事件,父元件就和消費事件無緣了不是嗎,所以這裡我的處理方式就很明顯了.

重寫元件的dispatchTouchEvent()方法即可.就拿我這裡的例子為例,如果希望子元件不消費事件,也就是點選子元件的情況下出發父元件的點選事件,只需要讓isBlind()返回true即可.就這麼簡單= =,話說這篇文章是不是很水啊= =,嘛,反正我寫部落格也不是為了出名= =

@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
    if(isBlind()) {
        return false;
    }
    return super.dispatchTouchEvent(ev);
}