-->

Android - on touch listener fired twice

2020-04-05 07:45发布

问题:

In my code, ontouch listener of a button is fired twice. please find below the code. I am using Google API 2.2.

Code in java file ....

submit_button = (Button)findViewById(R.id.submit);

 submit_button .setOnTouchListener(new View.OnTouchListener()
        {       
            public boolean onTouch(View arg0, MotionEvent arg1) { 
                int action=0;
                if(action == MotionEvent.ACTION_DOWN)
                {                   

                    startActivity(new Intent(First_Activity.this, Second_Activity.class));
                    finish(); 
                }
                return true;     
                }     
            });

Please help me on solving this issue.

回答1:

instead of using onTouchListener, you should use onClickListener for buttons.

submit_button.setOnClickListener(new OnClickListener() {    
    public void onClick(View v) {
        startActivity(new Intent(First_Activity.this, Second_Activity.class));
        finish();
    }
});


回答2:

It fires twice because there is a down event and an up event.

The code in the if branch always executes since the action is set to 0 (which, incidentally, is the value of MotionEvent.ACTION_DOWN).

int action=0;
if(action == MotionEvent.ACTION_DOWN)

Maybe you meant to write the following code instead?

if(arg1.getAction() == MotionEvent.ACTION_DOWN)

But you really should use OnClickListener as Waqas suggested.



回答3:

Did you attach the listener two to view elements? Before reacting on the event check from which view it comes using the View arg0 parameter.



回答4:

int action = event.getActionMasked();

Use this.