BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / mobile-terminal-at / #19182同步于 2014/12/24
该镜像源已超过 30 天没有更新,可能在源站已被删除。
MobileTerminalAT机器人发帖

很诡异的子View点击事件,不明缘由!!!

zishi
2014/12/24镜像同步7 回复
onInterceptTouchEvent(MotionEvent event)里,返回false了,直接运行的话,子View没有响应点击事件。。 但是,如果里面设置了断点,Debug 的时候,子View 又能够响应点击事件。。 困扰好久!!不知道什么情况~~
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
sollian机器人#1 · 2014/12/24
贴代码
zishi机器人#2 · 2014/12/24
// from com.handmark.pulltorefresh.libraay.PullToRefreshBase @Override public final boolean onInterceptTouchEvent(MotionEvent event) { if (!isPullToRefreshEnabled()) { return false; } final int action = event.getAction(); if (action == MotionEvent.ACTION_CANCEL || action == MotionEvent.ACTION_UP) { mIsBeingDragged = false; return false; } if (action != MotionEvent.ACTION_DOWN && mIsBeingDragged) { return true; } switch (action) { case MotionEvent.ACTION_MOVE: { // If we're refreshing, and the flag is set. Eat all MOVE events if (!mScrollingWhileRefreshingEnabled && isRefreshing()) { return true; } if (isReadyForPull()) { final float y = event.getY(), x = event.getX(); final float diff, oppositeDiff, absDiff; // We need to use the correct values, based on scroll // direction switch (getPullToRefreshScrollDirection()) { case HORIZONTAL: diff = x - mLastMotionX; oppositeDiff = y - mLastMotionY; break; case VERTICAL: default: diff = y - mLastMotionY; oppositeDiff = x - mLastMotionX; break; } absDiff = Math.abs(diff); if (absDiff > mTouchSlop && (!mFilterTouchEvents || absDiff > Math.abs(oppositeDiff))) { if (mMode.showHeaderLoadingLayout() && diff >= 1f && isReadyForPullStart()) { mLastMotionY = y; mLastMotionX = x; mIsBeingDragged = true; if (mMode == Mode.BOTH) { mCurrentMode = Mode.PULL_FROM_START; } } else if (mMode.showFooterLoadingLayout() && diff <= -1f && isReadyForPullEnd()) { mLastMotionY = y; mLastMotionX = x; mIsBeingDragged = true; if (mMode == Mode.BOTH) { mCurrentMode = Mode.PULL_FROM_END; } } } } break; } case MotionEvent.ACTION_DOWN: { if (isReadyForPull()) { mLastMotionY = mInitialMotionY = event.getY(); mLastMotionX = mInitialMotionX = event.getX(); mIsBeingDragged = false; } break; } } return mIsBeingDragged; } 这是一个上下拉都可以的listview,点击某个item的view的时候,它在这里做了一个拦截,测试,如果没有滑动的话,DOWN和UP返回的都是false,传递给子View了,但是item中的View就是响应不了事件,当我debug在这个函数开头设置断点,然后原先的View就可以正常被点击了。。 【 在 sollian 的大作中提到: 】 : 贴代码
sollian机器人#3 · 2014/12/25
if (action != MotionEvent.ACTION_DOWN && mIsBeingDragged) { return true; } 这句有没有问题,如果是move的话,会不会返回true。 感觉整段代码对动作的判断有些乱
zishi机器人#4 · 2014/12/25
目前只有点击事件,所以move返回true逻辑上是ok的。。主要是那个点击事件,有点费解。断点了就可以,不断点就不行。。 【 在 sollian 的大作中提到: 】 : if (action != MotionEvent.ACTION_DOWN && mIsBeingDragged) { : return true; : } : ...................
ccyingzi2009机器人#5 · 2014/12/25
断点的话。肯定不会滚动。 不断点的话点击的时候是有轻微的滚动的。我的建议是把 dif设置稍微大一点试试看 【 在 zishi 的大作中提到: 】 : 目前只有点击事件,所以move返回true逻辑上是ok的。。主要是那个点击事件,有点费解。断点了就可以,不断点就不行。。
zishi机器人#6 · 2014/12/25
已找到问题:异步加载图片的问题,我关掉异步加载,一切都正常了。。异步加载的问题,在解决中。。~~~~
zishi机器人#7 · 2014/12/25
ok,结贴。。谢谢大家~~~不是这里的问题,这里的事件都传递了的,异步加载完,我notify了一下。。导致了点击事件丢失了。。