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

Привет у меня EditText с текстом = 0,00. когда я нажимаю цифру 3, это должно быть как 0,03, а во второй раз, когда я нажимаю цифру 5, текст должен быть 0,35. И 35,0, 35,09, как это. EditText изначально имеет значение 0,00.

Это все сделано с тем же EditText,

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

7 ответов

Решение

Вы выбрали правильный подход. Вы должны расширить класс с помощью 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;
            }
        }
    });

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

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

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

В Kotlin Android EditText прослушиватель устанавливается с помощью,

   val searchTo : EditText = findViewById(R.id.searchTo)
   searchTo.addTextChangedListener(object : TextWatcher {
    override fun afterTextChanged(s: Editable) {

        // you can call or do what you want with your EditText here

        // yourEditText...
    }

    override fun beforeTextChanged(s: CharSequence, start: Int, count: Int, after: Int) {}
    override fun onTextChanged(s: CharSequence, start: Int, before: Int, count: Int) {}
})

Чтобы изменить текст;

multipleLine.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            MainActivity.myArray.set(pickId,String.valueOf(s));
            MainActivity.myAdapt.notifyDataSetChanged();
        }

        @Override
        public void afterTextChanged(Editable s) {

        }

Вот рабочая версия Kotlin.

        yourEditText.addTextChangedListener(object: TextWatcher {
    override fun afterTextChanged(s: Editable?) {
      // TODO Auto-generated method stub
    }

    override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
      // TODO Auto-generated method stub
    }

    override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
      doSomething()
    }
  })
Другие вопросы по тегам