Введение
У меня возникли проблемы с принудительной проверкой пары значений EditText
в проекте Android. Язык Java. android:inputType="number"
установлено. По умолчанию оба представления пусты.
Например, правило проверки таково, что editTextA
и editTextB
не могут быть равны нулю. В идеале проверка должна выполняться, когда пользователь заканчивает ввод в любом представлении.
ОБНОВЛЕННЫЙ ВОПРОС:
Вот еще один пример. Значения editTextA
и editTextB
должны составлять до 5 макс.
Использование TextWatcher
вроде бы нормально, но далеко не идеально. Я думаю, что лучшим способом было бы каким-то образом иметь возможность ограничить пользовательский ввод для одного элемента управления на основе текущего значения другого. Допустим, onCreate
содержит следующий код:
editTextA.setFilters(new InputFilter[]{ new InputFilterMinMax("0", "5")});
editTextB.setFilters(new InputFilter[]{ new InputFilterMinMax("0", "5")});
где InputFilterMinMax
- это класс, который реализует InputFilter
согласно Есть ли способ определить минимальное и максимальное значение для EditText в Android?
Теперь давайте предположим, что значение editTextA
становится 3. Максимальное значение фильтра editTextB
теперь должно быть 2 вместо 5.
Вопрос в том, можно ли это применить на лету?
ЧАСТЬ ОРИГИНАЛЬНОГО ВОПРОСА:
Проблема 1: Я пытался установить EditorActionListener
, но есть слишком много способов, которыми элемент управления может потерять фокус, и я не могу заставить код проверки работать во всех случаях. Я пробовал:
if (actionId == EditorInfo.IME_ACTION_DONE || actionId == EditorInfo.IME_ACTION_NEXT || actionId = EditorInfo.IME_ACTION_PREVIOUS) {
// get values of A and B
return (valueA+valueB>0);
}
return false;
но, похоже, не работает, когда пользователь нажимает непосредственно на другой элемент управления, например.
Проблема 2: Вышеуказанный подход не работает согласованно, особенно когда я пытаюсь установить ошибку. Где setError()
должен быть вызван в слушателе действия?
В целом, вышеуказанный подход кажется неуклюжим. Есть ли другой способ выполнить такую проверку?