如何使listview的标题不消耗触摸事件

时间:2016-08-03 06:28:59

标签: android listview touch-event

我想要什么

我希望listView的标题不要使用触摸事件

问题

我有一个FrameLayout。在它中,有一个mapview和一个listview。列表视图具有透明的标题视图,以显示更多的mapview。现在标题视图响应触摸事件,但我想将这些事件发送到mapview。怎么办?

我试过

  • headerView.setEnabled(false)
  • headerView.setClickable(false)
  • mListView.addHeaderView(headerView, null, false)

所有这些都失败了,有什么建议吗?

2 个答案:

答案 0 :(得分:3)

我在SO中尝试了很多解决方案,但它们不起作用。最后,我覆盖了dispatchTouchEvent()函数,它可以正常工作。完整版本已超过gist ,关键代码就在这里。

@Override
public boolean dispatchTouchEvent(MotionEvent motionEvent) {
    if(mHeaderView == null) return super.dispatchTouchEvent(motionEvent);
    if(motionEvent.getAction() == MotionEvent.ACTION_DOWN){
        //if touch header not to consume the event
        Rect rect = new Rect((int) mHeaderView.getX(), (int) mHeaderView.getY(), mHeaderView.getRight(), mHeaderView.getBottom());
        if(rect.contains((int)motionEvent.getX(), (int)motionEvent.getY())){
            isDownEventConsumed = false;
            return isDownEventConsumed;
        }else {
            isDownEventConsumed = true;
            return super.dispatchTouchEvent(motionEvent);
        }
    }else{
        //if touch event not consumed, then move/up event should be the same
        if(!isDownEventConsumed)return isDownEventConsumed;
        return super.dispatchTouchEvent(motionEvent);
    }
}

答案 1 :(得分:0)

您是否尝试在扩充标题视图或this时设置onClickListener null?