listview 不可滑動問題解決
在專案中遇到一個需求,listview有一個比較複雜的item,item中有整體響應區事件,也有其他view的點選響應,listview的父親要求滑動,在點選listview區域時要求在滑動的只是只滑動listview,但一般做法無法滿足要求,listview無法兼顧點選事件與滑動。
解決的辦法是,給item設定一個rootview,重寫rootview的onTouchEvent
@Override
public boolean onTouchEvent(MotionEvent event) {
final int action = event.getAction();
if(action == MotionEvent.ACTION_MOVE) {
if(null != scrollView) {
customListView.setEventFlag(true);
return false;
}
}
return super.onTouchEvent(event);
}
再實現一個定製的listview,重寫onIntercepotTouchEvent方法:
@Override
public boolean onInterceptTouchEvent(MotionEvent ev){
if(MotionEvent.ACTION_UP == ev.getAction()) {
//父view允許滑動
}else {
//禁止父view滑動
}
if(eventFlag) {
eventFlag = !eventFlag;
return true;
}
return super.onInterceptTouchEvent(ev);
}
這樣既可實現item的點選與滑動共存。原理是onTouchEvent事件是向上傳遞的,在view處理完事件後,擷取move,做擷取標誌,listview擷取所有的事件,然後自己做處理。