Я реализую OTP-экран с шестью EditText. Я хочу сделать один текстовый наблюдатель для всех полей. Я искал ответы, но они не используют привязку данных. Я хочу реализовать это, используя привязку данных в моем коде. Как можноЯ делаю это, пожалуйста, помогите?
bottomSheetLoginBinding.otpOne.addTextChangedListener(new GenericTextWatcher(bottomSheetLoginBinding.otpOne));
bottomSheetLoginBinding.otpTwo.addTextChangedListener(new GenericTextWatcher(bottomSheetLoginBinding.otpTwo));
bottomSheetLoginBinding.otpThree.addTextChangedListener(new GenericTextWatcher(bottomSheetLoginBinding.otpThree));
bottomSheetLoginBinding.otpFour.addTextChangedListener(new GenericTextWatcher(bottomSheetLoginBinding.otpFour));
bottomSheetLoginBinding.otpFive.addTextChangedListener(new GenericTextWatcher(bottomSheetLoginBinding.otpFive));
bottomSheetLoginBinding.otpSix.addTextChangedListener(new GenericTextWatcher(bottomSheetLoginBinding.otpSix));
Это мой открытый класс класса TextWatcher. GenericTextWatcher реализует TextWatcher {private View view;
private GenericTextWatcher(View view) {
this.view = view;
}
@Override
public void afterTextChanged(Editable editable) {
// TODO Auto-generated method stub
String text = editable.toString();
boolean allOtherFilled = false;
switch (view.getId()) {
case R.id.otpOne:
if (text.length() == 1)
bottomSheetLoginBinding.otpTwo.requestFocus();
break;
case R.id.otpTwo:
if (text.length() == 1)
bottomSheetLoginBinding.otpThree.requestFocus();
else if (text.length() == 0)
bottomSheetLoginBinding.otpOne.requestFocus();
break;
case R.id.otpThree:
if (text.length() == 1)
bottomSheetLoginBinding.otpFour.requestFocus();
else if (text.length() == 0)
bottomSheetLoginBinding.otpTwo.requestFocus();
break;
case R.id.otpFour:
if (text.length() == 1)
bottomSheetLoginBinding.otpFive.requestFocus();
else if (text.length() == 0)
bottomSheetLoginBinding.otpThree.requestFocus();
break;
case R.id.otpFive:
if (text.length() == 1)
bottomSheetLoginBinding.otpSix.requestFocus();
else if (text.length() == 0)
bottomSheetLoginBinding.otpFour.requestFocus();
break;
case R.id.otpSix:
if (text.length() == 0)
bottomSheetLoginBinding.otpFive.requestFocus();
break;
}
}
}
@Override
public void beforeTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub
}
@Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2, int arg3) {
// TODO Auto-generated method stub
}
}
Я сделал этот код в своем классе деятельности. НоЯ думаю, что он не достигает MVVM полностью. Как я могу сделать это в классе ViewModel.