Ограничьте ввод в пару EditText, применяя InputFilters на лету - PullRequest
0 голосов
/ 11 мая 2019

Введение

У меня возникли проблемы с принудительной проверкой пары значений 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() должен быть вызван в слушателе действия?

В целом, вышеуказанный подход кажется неуклюжим. Есть ли другой способ выполнить такую ​​проверку?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...