В моем приложении для 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();
}
Отредактировано, чтобы включить




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