Как использовать Single TextWatcher для нескольких EditTexts, используя привязку данных MVVM? - PullRequest
0 голосов
/ 28 октября 2019

Я реализую 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.

...