Я делаю OTP Activity
и мне нужно реализовать функцию удаления, у меня есть функция ниже, которая должна быть запущена onKey
вверх по кнопке возврата.Я думаю, что я мог бы использовать getCurrentFocus
, чтобы узнать, какие поля в настоящее время заполняются, а затем использовать requestFocus
, чтобы выбрать предыдущее, но, похоже, это не работает, у меня есть другая функция для goToNext
, которая прекрасно работает, поэтому я запутался, почему.
public void goToPrevious() {
EditText currentFocus = (EditText) getCurrentFocus();
if (currentFocus == otpOne) {
return;
}
if (currentFocus == otpTwo) {
otpOne.requestFocus();
return;
}
if (currentFocus == otpThree) {
otpTwo.requestFocus();
return;
}
if (currentFocus == otpFour) {
otpThree.requestFocus();
return;
}
}
Ниже приведен код для goToNext
, который отлично работает.
public void goToNext() {
EditText currentFocus = (EditText) getCurrentFocus();
if (currentFocus == otpOne) {
otpTwo.requestFocus();
return;
}
if (currentFocus == otpTwo) {
otpThree.requestFocus();
return;
}
if (currentFocus == otpThree) {
otpFour.requestFocus();
return;
}
if (currentFocus == otpFour) {
return;
}
}
Я вызываю goToPrevious путем реализации onKeyListener, ниже приведен код
@Override
public boolean onKey(View v, int keyCode, KeyEvent event) {
EditText currentFocus = (EditText) getCurrentFocus();
Log.i("ENOUGH", "onKey: " + keyCode + " " + event.getAction() + " " + KeyEvent.KEYCODE_DEL);
switch (event.getKeyCode()) {
case KeyEvent.KEYCODE_DEL: {
currentFocus.setText(null);
goToPrevious();
return false;
}
}
return false;
}