1. 程式人生 > >listview 不可滑動問題解決

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擷取所有的事件,然後自己做處理。