【发布时间】:2018-07-29 11:14:29
【问题描述】:
我计划设计一个带有 6 个 EditTexts 的 OTP 屏幕,所以我在所有 editTexts 中实现了 TextWatcher。所以它会前进到每个editText,我还实现了基于editText长度后退的逻辑,但是如果用户输入错误的otp并且如果用户在点击键盘上的delete键时继续那个特定的editText,它将转到以前的editText但是它不应该回到以前的editText,而是应该保留在同一个editText中。
private void setEventsForEditText() {
editFirstOTPDigit.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
if (charSequence.length() == 1) {
editSecondOTPDigit.requestFocus();
}
}
@Override
public void afterTextChanged(Editable editable) {
}
});
editSecondOTPDigit.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
if (charSequence.length() == 1) {
editThirdOTPDigit.requestFocus();
} else {
editSecondOTPDigit.requestFocus();
}
}
@Override
public void afterTextChanged(Editable editable) {
}
});
editThirdOTPDigit.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
if (charSequence.length() == 1) {
editFourthOTPDigit.requestFocus();
} else {
editSecondOTPDigit.requestFocus();
}
}
@Override
public void afterTextChanged(Editable editable) {
}
});
editFourthOTPDigit.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
if (charSequence.length() == 1) {
editFifthOTPDigit.requestFocus();
} else {
editThirdOTPDigit.requestFocus();
}
}
@Override
public void afterTextChanged(Editable editable) {
}
});
editFifthOTPDigit.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
if (charSequence.length() == 1) {
editSixthOTPDigit.requestFocus();
} else {
editFourthOTPDigit.requestFocus();
}
}
@Override
public void afterTextChanged(Editable editable) {
}
});
editSixthOTPDigit.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
if (charSequence.length() == 1) {
buttonVerifyOTP.setVisibility(View.VISIBLE);
hideKeyboard();
} else {
editFifthOTPDigit.requestFocus();
}
}
@Override
public void afterTextChanged(Editable editable) {
}
});
【问题讨论】:
标签: android android-edittext one-time-password