复选框添加onTouchListener事件

3
我有一个带有onTouchListenercheckbox,在这个监听器中,我有一个switch语句,包括以下几种情况:
  • MotionEvent.ACTION_DOWN
  • MotionEvent.ACTION_UP
  • MotionEvent.ACTION_CANCEL
如果我在ACTION_UP情况下没有使用view.performClick(),会收到Lint警告:

当检测到点击时, onTouch 应该调用 View#performClick

但这也导致我的方法无法正常工作:
public void touchCheckBox(View view) {
    CheckBox checkBox = (CheckBox) view.findViewById(R.id.checkbox);
    checkBox.performClick();
}

如果我在ACTION_DOWN中添加view.performClick(),那么我的方法就可以正常工作。

touchCheckBox()的代码如下:

public boolean onTouch(View view, MotionEvent motionEvent) {
    boolean isEventConsumed;
    switch (motionEvent.getAction()) {
        case MotionEvent.ACTION_DOWN:
            row.setBackgroundColor(mContext.getResources().getColor(R.color.blueSelection));
            isEventConsumed = true;
            break;
        case MotionEvent.ACTION_UP:
            view.performClick();
            row.setBackgroundColor(mContext.getResources().getColor(R.color.white));
            touchCheckBox(row);
            isEventConsumed = true;
            break;
        case MotionEvent.ACTION_CANCEL:
            row.setBackgroundColor(mContext.getResources().getColor(R.color.white));
            isEventConsumed = true;
            break;
        default:
            isEventConsumed = false;
            break;
    }
    return isEventConsumed;
}

ACTION_UP 情况下,是否需要使用 view.performClick() 方法,或者可以忽略 Lint 警告?

1个回答

2

https://code.google.com/p/android-developer-preview/issues/detail?id=1394

这被报告为一个bug,我认为你只需要抑制警告。

好的,请试试这个:

public boolean onTouch(View v, MotionEvent event) {
    switch (event.getAction()) {
    case MotionEvent.ACTION_DOWN:
        // stuffs
        break;
    case MotionEvent.ACTION_UP:
        v.performClick();
        break;
    default:
        break;
    }
    return true;
}

但在那种情况下,总是返回false,而在我的情况下,在MotionEvent.ACTION_DOWN MotionEvent.ACTION_UP中返回true,并且在MotionEvent.ACTION_UP中调用touchCheckBox()方法。 - Giks91
这段代码和我的类似。请看我编辑过的帖子。 - Giks91

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接