Как использовать событие EditText onTextChanged, когда я нажимаю номер? - PullRequest
42 голосов
/ 15 сентября 2011

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

Все они выполняются с одним и тем же EditText.

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

Ответы [ 4 ]

88 голосов
/ 15 сентября 2011

Вы также можете попробовать это:

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();
    } 
});
36 голосов
/ 15 сентября 2011

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

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

8 голосов
/ 03 марта 2016

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

    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;
            }
        }
    });
1 голос
/ 27 декабря 2018

вставьте логику в

afterTextChanged(Editable s) {
    string str = s.toString()
    // use the string str
}

документацию на TextWatcher

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...