因为头布局的viewpager自己处理点击事件
public boolean dispatchTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: startX = (int) ev.getX(); startY = (int) ev.getY(); // 请求父控件及祖宗控件不要拦截事件 getParent().requestDisallowInterceptTouchEvent(true);
所以导致我再listview中的ACTION_DOWN事件有可能被viewpager吃了
所以我需要在自定义listview中判断一下ACTION_DOWN到底被吃了没有
private int startY = -1; public boolean onTouchEvent(MotionEvent ev) { switch (ev.getAction()) { case MotionEvent.ACTION_DOWN: startY = (int) ev.getY(); break; case MotionEvent.ACTION_MOVE: if (startY == -1) {// 如果用户按住viewpager向下滑动, 会导致listview无法拿到ACTION_DOWN, //因为此时事件会被交给父控件处理 // 此时要重新获取startY startY = (int) ev.getY(); }