需求
在列表中,列表item需要LongClick事件,列表中的子View需要处理Click事件。
解决
- 给子View也添加LongClick事件,调用父View的LongClick逻辑。
- 父View拦截LongClick事件。
@Override
public boolean dispatchTouchEvent(MotionEvent ev) {
int mask = ev.getActionMasked();
if (mask == MotionEvent.ACTION_DOWN) {
mLongPressTriggered = false;
}
boolean handle = super.dispatchTouchEvent(ev);
if (mask == MotionEvent.ACTION_DOWN && isLongClickable()) {
scheduleLongPress();
}
if (ev.getActionMasked() == MotionEvent.ACTION_UP
|| ev.getActionMasked() == MotionEvent.ACTION_CANCEL) {
removeLongPress();
}
return handle;
}
private void scheduleLongPress() {
postDelayed(longClickRunnable, ViewConfiguration.getLongPressTimeout());
}
@Override
public boolean onTouchEvent(MotionEvent event) {
if (mLongPressTriggered && event.getActionMasked() == MotionEvent.ACTION_UP) {
return true;
}
return super.onTouchEvent(event);
}
private final Runnable longClickRunnable = new Runnable() {
@Override
public void run() {
mLongPressTriggered = performLongClick();
Log.d(TAG, "run() called" + mLongPressTriggered);
}
};
private void removeLongPress() {
removeCallbacks(longClickRunnable);
}
@Override
public boolean onInterceptTouchEvent(MotionEvent ev) {
if (mLongPressTriggered && ev.getActionMasked() == MotionEvent.ACTION_UP) {
return true;
}
return super.onInterceptTouchEvent(ev);
}
复制代码
代码
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END