RecyclerView實現Item點選事件方法三/四
阿新 • • 發佈:2018-12-27
此係列文章隔上次釋出有一段時間,原因就是懶(其實是比較忙),今天來說下剩下的兩種方法,如何優雅的實現
對於方法三我這裡就不說了,因為有很多文章都有說明,那就是基於RecyclerView.OnItemTouchListener,剛開始我也是按這種思路實現的,發現確實很優雅,當時也沒發現有什麼不妥,然後專案中就用起來了,後來發現還是有問題的。問題點:當你的ItemView中有View也要設定點選事件時,那麼這個時候ItemViewClickListener事件與子View的ClickListener事件衝突
那麼如何解決這個問題了?下面我們接著介紹第4種實現方案
此方法我也是Google到一位大牛的方案,我覺得可行,大家可以參考下
首先要定義一個自己的RecyclerView類我就不說了,直接上程式碼
//初始化
private void init() {
addOnChildAttachStateChangeListener(new OnChildAttachStateChangeListener() {
@Override//當子View被新增到Window
public void onChildViewAttachedToWindow(View view) {
//此處引數的view就是ItemView
//這裡可以這麼實現
view.setOnClickListener(new View.OnClickListener(){
public void onClick(View v){
//這裡就可以回撥自己定義的介面方法了
}
});
}
@Override//當子View從Window中移除/解綁
public void onChildViewDetachedFromWindow (View view) {
//此處引數的view就是ItemView
//那麼這裡我們可以做些什麼事了?
//兩種方案:
//1.啥也不做;
// do nothing
//2.把view的點選事件取消
view.setOnClickListener(null);
}
});
}
好啦,看到這裡我們其實已經說完了,一切盡在程式碼中,廢話我們就不多說了,相信大家看完之前的兩種實現方式以及第三種實現方式,這種方式一看就懂了,如有問題,還請大家能給我提出問題與疑問