2014-01-26 53 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) { 
    .... 
    
相關問題