Использование метода ontextchanged событие полей EditText, когда я нажимаю на номер?


Привет, у меня есть EditText с "text = 0.00". когда я нажимаю цифру 3, это должно быть похоже на 0.03, а во второй раз, когда я нажимаю цифру 5, текст должен быть 0.35. И 35.0, 35.09 вот так. EditText, изначально имеющее значение 0.00.

Все это делается с помощью одного и того же EditText.

Как мне этого добиться? Я примерил addTextChangedListener() с TextWatcher().

3 38

3 ответа:

Вы выбрали правильный подход. Вы должны расширить класс с помощью TextWatcher и переопределить afterTextChanged(),beforeTextChanged(), onTextChanged().

Вы должны написать желаемую логику в методе afterTextChanged(), чтобы достичь нужной вам функциональности.

Вы также можете попробовать следующее:

EditText searchTo = (EditText)findViewById(R.id.medittext);
searchTo.addTextChangedListener(new TextWatcher() {
    @Override
    public void afterTextChanged(Editable s) {
        // TODO Auto-generated method stub
    }

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {
        // TODO Auto-generated method stub
    }

    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {
        doSomething();
    } 
});

Здесь я написал что-то похожее на то, что вам нужно:

    inputBoxNumberEt.setText(".     ");
    inputBoxNumberEt.setSelection(inputBoxNumberEt.getText().length());
    inputBoxNumberEt.addTextChangedListener(new TextWatcher() {

        boolean ignoreChange = false;

        @Override
        public void afterTextChanged(Editable s) {
        }

        @Override
        public void beforeTextChanged(CharSequence s, int start,
                                      int count, int after) {
        }

        @Override
        public void onTextChanged(CharSequence s, int start,
                                  int before, int count) {
            if (!ignoreChange) {
                String string = s.toString();
                string = string.replace(".", "");
                string = string.replace(" ", "");
                if (string.length() == 0)
                    string = ".     ";
                else if (string.length() == 1)
                    string = ".  " + string;
                else if (string.length() == 2)
                    string = "." + string;
                else if (string.length() > 2)
                    string = string.substring(0, string.length() - 2) + "." + string.substring(string.length() - 2, string.length());
                ignoreChange = true;
                inputBoxNumberEt.setText(string);
                inputBoxNumberEt.setSelection(inputBoxNumberEt.getText().length());
                ignoreChange = false;
            }
        }
    });