Android - on touch listener两次开火

时间:2012-03-03 17:56:11

标签: android ontouchlistener

在我的代码中,按钮的ontouch侦听器会被触发两次。 请在下面找到代码。我使用的是Google API 2.2。

java文件中的代码....

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;     
                }     
            });

请帮我解决这个问题。

4 个答案:

答案 0 :(得分:14)

它发射两次,因为有一个向下事件和一个向上事件。

if分支中的代码总是执行,因为action设置为0(顺便说一下,它是MotionEvent.ACTION_DOWN的值)。

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

也许您打算编写以下代码?

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

但是你应该像Waqas建议的那样使用OnClickListener。

答案 1 :(得分:7)

而不是使用 onTouchListener ,您应该使用 onClickListener 作为按钮。

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

答案 2 :(得分:0)

您是否将侦听器两者附加到视图元素?在对事件做出反应之前,请使用View arg0参数检查来自哪个视图。

答案 3 :(得分:0)

int action = event.getActionMasked();

使用此功能。