Что я хочу У меня есть EditText, где пользователь может ввести значение, например 10.40.Как только пользователь завершит редактирование, я форматирую его ввод в валюте, например, вышеупомянутое значение будет отформатировано до $ 10,40 (в случае Locale.US).И я отображаю этот результат в том же EditText, который ранее редактировал пользователь.
Проблема Поскольку я собираюсь отформатировать (то есть изменить) его ввод, мне нужно знать, когда он это сделает (такмое форматирование не мешает его постоянному вводу).
То, что я пробовал TextWatcher не вариант, так как он запускается при каждом отдельном редактировании, следовательно, когда пользователь вводит один, ноль, четыре, точку и ноль (= 10,40).В настоящее время я использую OnFocusChangeListener, который работает как нужно, НО проблема в том, что у меня есть кнопки в моем приложении, и если пользователь нажимает кнопку после редактирования EditText, EditText не теряет фокус, поэтому мой код форматирования никогда не вызывается...
После этого я попытался поиграться с фокусом кнопки, установив его на FocusableInTouchMode - в результате дважды нажимается кнопка, чтобы выстрелить (что не идет), так как она получает фокуспервый раз и активируется второй раз.После стольких хакерских атак мне стало интересно, есть ли у кого-нибудь идея, как решить эту дилемму.
Некоторый код
Я добавляю следующий OnFocusChangeListener в мой EditText, функция которогоЯ описал выше.EditText инкапсулирован в CurrencyTextbox (который на самом деле не имеет значения):
@Override
protected OnFocusChangeListener getOnFocusChangeListener() {
return new OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean hasFocus) {
if (hasFocus) {
//Member variable in the class which contains an EditText
CurrencyTextbox.this.hadFocus = true;
} else {
// Thes EditText has lost focus
Log.v(TAG, "Lost focus.");
if (CurrencyTextbox.this.hadFocus) {
// We previously had focus, now we lost it, format the user input!
// Get current value of the Textbox
String value = CurrencyTextbox.this.textbox.getText().toString();
// Formatting the user input
value = String.format(//Doing some formatting);
// Reset the had focus
CurrencyTextbox.this.hadFocus = false;
}
}
}
};
}
Проблема, однако, в том, что вышеупомянутый OnFocusChangelistener get вызывается, только если мой EditText теряет фокус, но он НЕ теряет фокус, когда я нажимаюна кнопке в моей Деятельности, и, как указано выше, невозможно установить isFocusableInTouchMode для кнопки в значение true, так как для этого нужно дважды щелкнуть каждый раз для запуска.