2013-06-22 54 views
0

我正在嘗試處理輸入字符時,清除框,並準備處理另一個。Android EditBox TextWatcher太火了

該應用程序使用一個總是有1個字符的EditBox。當用戶輸入一個新角色時,一個監聽者將會觸發。該監聽器(TextWatcher)的afterTextChanged方法處理輸入的字符並清除文本。之後,它清除文本框,並讓它準備好聽下一個。然而,在那之後它繼續發射。我嘗試設置一個標誌來處理所有其他的射擊,但有時它是迂迴的並且觸發了奇數次,並且錯誤地翻轉了標誌。

@Override 
public void afterTextChanged(Editable arg0) { 
    if (arg0.length() > 0) { 
     //if (mToggle) 
     { 
      act.checkText(arg0.toString().substring(arg0.length() - 1)); 
      text.setText(""); 
     } 
     mToggle = !mToggle; // to catch extra fire-off 
    } 
} 

mToggle是TextWatcher實現的屬性變量。

1)爲什麼多次點火?

2)我需要在這裏做什麼?

謝謝了,
彌敦道

+0

您的第一個問題的答案字面上是[在文檔中](http://developer.android.com/reference/android/text/TextWatcher.html):* 「從這個回調函數['afterTextChanged()']對s進行進一步的修改是合理的,但是要注意不要陷入無限循環,因爲你所做的任何修改都會導致這個方法成爲ca遞歸地遞歸**。「* –

回答

0

首先,爲什麼是

if (mToggle) 

註釋掉?

其次,你應該只設置mToggle爲false您若:

if (mToggle) { 

     act.checkText(arg0.toString().substring(arg0.length() - 1)); 
     text.setText(""); 
     mToggle = false; // to catch extra fire-off 

} 

然後,別的地方的代碼(在另一個編輯框,用戶點擊,您可以設置mToggle回真這將允許。您的if(mToggle)條件再次運行一次