onTouchListener warning: onTouch should call View#performClick when a click is detected

前端 未结 5 1762
长情又很酷
长情又很酷 2020-12-23 15:48

I have created a onTouchListener. Unfortunately onTouch() method throws me a warning:

com/calculator/activitys/Calculat         


        
5条回答
  •  天涯浪人
    2020-12-23 16:24

    In case you're not using a Custom View which explicitly overrides onPerformClick , the warning won't get removed by just following Secko's answer.

    In addition to his answer, for doing the same on classes like android.widget.Button or Button you need to make a simple custom view which extends the target view.

    Example :

    The Custom View Class:

    public class UselessButton extends AppCompatButton {
        public UselessButton(Context context) {
            super(context);
        }
    
        public UselessButton(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        public UselessButton(Context context, AttributeSet attrs, int defStyle) {
            super(context, attrs, defStyle);
        }
    
        @Override
        public boolean performClick() {
            return super.performClick();
        }
    }
    

    XML :

    
    

    Java :

        left.setOnTouchListener((v, event) -> {
            if (event.getAction() == MotionEvent.ACTION_DOWN) {
                enLeft = 1;
                enRight = 0;
                return true;
            } else if (event.getAction() == MotionEvent.ACTION_UP) {
                enLeft = 0;
                v.performClick();
                return false;
            } else {
                return false;
            }
        });
    

    Current problems : Warning gets resolved by IDE, but can't see this practically performing click action on a real Android Device.

    EDIT: Fixed getting the click event : Use View.setPressed(boolean)

    down.setOnTouchListener((v, event) -> {
        if (event.getAction() == MotionEvent.ACTION_DOWN) {
            enFront = 0;
            enBack = 1;
            left.setPressed(true);
            return true;
        } else if (event.getAction() == MotionEvent.ACTION_UP) {
            enBack = 0;
            v.performClick();
            v.setPressed(false);
            return false;
        } else {
            return false;
        }
    

提交回复
热议问题