RecyclerView父元件和子元件點選衝突問題解決
阿新 • • 發佈:2018-12-21
嘛嘛...遇到的問題是這樣的,我仿照微信的長按點選顯示放大文字效果對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); }