EditText Focus и выбор курсора вводятся в неправильное поле ввода

В моем приложении для Android есть два поля EditText. Когда ввод недопустим в первом поле, запускается диалоговое окно с предупреждением, и я пытаюсь переключить фокус и курсор ввода обратно на недопустимое поле EditText (RollId), чтобы его можно было повторно ввести.

Смена фокуса и курсор ввода действительно работают, но когда я снова начинаю вводить данные, все отображается в неправильном поле editText (Location).

final EditText RollId = findViewById(R.id.scan_roll_id);
final EditText Location = findViewById(R.id.scan_location);

RollId.setOnFocusChangeListener(new View.OnFocusChangeListener() {
    @Override
    public void onFocusChange(View view, boolean hasFocus) {
        if (!hasFocus) {
            if (validate.ValidateRollId(String.valueOf(RollId.getText()))) {
                // TODO: parse and populate labels
            } else {
                  // Not a valid RollId format
                  AlertDialog alertDialog = new AlertDialog.Builder(MoveMaterialActivity.this).create();
                  validate.RollIdAlert("The scanned Roll Id has the incorrect format. Please enter manually.", alertDialog);
                  TextKeyListener.clear(RollId.getText());
                  RollId.setSelection(0);
                  Location.clearFocus();
                  RollId.requestFocus();
           }
       }
   }
});

Думаю, я в основном пытаюсь понять, как заблокировать ввод из поля Location EditText или переключить его на поле RollId EditText. Я думал, что RollId.setSelection(0) достигнет этого.

редактировать: RollIdAlert ())

public void RollIdAlert(String message, AlertDialog alert) {
    alert.setTitle("RollId Format Invalid");
    alert.setMessage(message);
    alert.setButton(AlertDialog.BUTTON_NEUTRAL, "OK",
            new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog, int which) {
                    dialog.dismiss();
                }
            });
    alert.show();
}

Выложите метод RollIdAlert()

user8959091 09.08.2018 21:04

Отредактировано, чтобы включить

Lamar 09.08.2018 21:24
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
2
71
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Измените метод validate.RollIdAlert (), включив в него 3D-параметр: EditText et
В вашем слушателе для закрытия диалогового окна предупреждения после dismiss(); поместите следующие строки:

          et.requestFocus();
          et.setSelection(0);

Я рад_______

user8959091 09.08.2018 21:29

Другие вопросы по теме