2012-05-14 63 views
2

我有一個EditText字段。當我在其上設置onClickListener時,它將首先需要關注該字段,然後單擊以調用該偵聽器。所以實際上是兩次點擊來調用監聽器。我怎樣才能解決這個從第一次點擊工作?我不想將focusable設置爲false,因爲那麼程序將無法工作。Android EditText setOnClickListener

回答

5

正如其他人所說,第一觸摸對焦的看法可能會有所幫助,第二觸摸「點擊」它。而不是實施OnClickListener,實施OnFocusChangeListener。例如

EditText edittext = (EditText)findViewById(R.id.myedittext); 
edittext.setOnFocusChangeListener(new View.OnFocusChangeListener() { 
    @Override 
    public void onFocusChange(View v, boolean hasFocus) { 
     if(hasFocus) { 
      //handle your situation here 
     } 
    } 
}); 
+0

沒有這個運氣。 :/ – MikkoP

+0

你能更具體嗎?你調試了嗎?它是否到達了焦點聽衆部分?如果是這樣,是不是達到了第一次點擊代碼的「處理情況」部分? – kcoppock

+0

現在工作。你的代碼有錯誤。 onFocus應該是onFocusChange。謝謝:) – MikkoP

0

我不完全明白你的意思是有兩次點擊才能打電話給聽衆。但是,如果OnClick方法被調用兩次,而您只希望代碼運行一次,則可以創建一個標誌作爲成員變量,用於跟蹤代碼是否已經運行。例如,初始化firstTimetrue後,有這樣的事情在你的onClick方法:

if (firstTime) { 
    // Put code that you want executed once here 
    firstTime = false; 
} 
else { 
    firstTime = true; // Second time: reset the flag 
} 
+0

不,這不是問題所在。在做任何事情之前,我必須兩次點擊該字段。 – MikkoP

0

<requestFocus /> 

在你的EditText XML格式。 試試吧,你

<EditText 
      android:id="@+id/edtTxtEmail1" 
      android:layout_width="240dp" 
      android:layout_height="wrap_content" 
      android:layout_marginTop="10dp" 
      android:inputType="textEmailAddress" 
      android:hint="Email ID" > 
      <requestFocus /> 
     </EditText> 
+0

否則是的,但我有多個輸入都需要這個動作。 – MikkoP

1

當在android中觸摸EditText時,首先它的焦點被改變。 OnFocusChangeListener第一次工作。

之後,onClickListener每次都有效。

所以,如果你想實現上的EditText聽衆的東西,它是更好地執行setOnTouchListener

每次它將工作。