2015-02-24 51 views
1

因此,我目前正在研究一個應用程序,該應用程序接受用戶輸入,激活退格鍵以刪除輸入,然後添加一些其他文本。 (所以是的,我基本上用TextWatcher覆蓋他們的輸入)Android - 調用backspace而不發生onTextChanged

沒問題:當我打電話text.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_DEL));時,它會一次又一次地觸發onTextChanged。現在有什麼辦法可以刪除用戶輸入而不必再次觸發onTextChanged?

謝謝!

+0

您是否嘗試過直接設置文本?像textView.setText(text.substring(0,length - 1))。 – 2015-02-24 20:26:01

回答

1

我通過調用edittext.removeTextChangedListener(this);,然後派遣鍵,然後再調用edittext.addTextChangedListener(this);固定它。這是乾淨的嗎?很高興聽到您的意見。

+0

謝謝,這是一種解決方法..但它的工作 – Pallavi 2016-09-05 10:41:38

1

不要從onTextChanged回調中調度關鍵事件。您可以在文本中保留內部緩衝區,並在每個有趣的關鍵事件上將整個TextView設置爲該緩衝區。

0

也許,你正試圖進一步改變使用TextWatcher用戶只是改變了文本。爲了能夠做到這一點,最好的選擇是使用afterTextChanged方法:

public abstract void afterTextChanged (Editable s) 

這種方法被調用來通知您,內部的某個地方,該文本已被更改。從這個回調中對s進行進一步修改是合理的,但要小心不要讓自己陷入無限循環,因爲您所做的任何更改都會導致此方法被遞歸調用。

爲了避免遞歸,您可以設置一個標誌,指示您正在更改文本,並在下一次調用中清除該標誌。您還可以使用其他回調(beforeTextChangedonTextChanged)收集有關更改的更多信息。

參考:http://developer.android.com/reference/android/text/TextWatcher.html

相關問題