2014-01-26 54 views
0

这段代码是从我的活动onCreate()叫:为什么setOnClickListener调用两次?

private void setOnClickListeners() { 

     mLoginButton.setOnClickListener(new View.OnClickListener() { 
      @Override 
      public void onClick(View v) { 
       onSignClicked(); 
      } 
     }); 

    mForgotYourText.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      onRemindClicked(); 
     } 
     }); 

.. 

} 

mLoginButton是一个TextView一个的LinearLayout里面

mForgotYourText是一个TextView

在调试时我看到mLoginButton.setOnClickListener分配被称为两次。

mForgotYourText.setOnClickListener只按预期调用一次赋值。为什么不同?是因为eventHandling传播吗?

如果是这样 - 为什么public void onClick(View v)无法返回布尔值来停止传播?

一个更奇怪的是,该代码被称为3倍,

同一元素mLoginButton的工作:

mPhoneNumberField.setInputTextOnTouchListener(new OnTouchListener() { 
     @Override 
     public boolean onTouch(View v, MotionEvent event) { 
      // TODO Auto-generated method stub 
      setResult(RESULT_CANCELED); 
      finish(); 
      return true; 
     } 
    }); 
+0

确保您没有设置安卓的onClick =“onSignClicked()”上mLoginButton通过XML – JafarKhQ

回答

0

在触摸设备上,你需要把它放在休假(因为你按按钮和它的实际被点击时您凯特你从按钮的手指)

+1

你是什么意思'上leave'怎么样? –

0
  1. 如果你没有在XML中,onCl ick只会被调用一次。

  2. 这就是所谓的三次至少,因为这样onTouch作品: 它可以用来追踪触摸动作 - 它不断地与当前的行动一起报道了触摸位置 - ACTION_DOWNACTION_MOVEACTION_UP。这就是为什么你看到它被称为三次。如果您选中event.getAction(),您会看到上面的三项操作会每次显示一次。

    要避免此行为,只需检查该操作。通常你想确保它的ACTION_UP

    if (Event.getAction() == MotionEvent.ACTION_UP) { 
    .... 
    
相关问题