когда setText в editText TextWatcher.onTextChanged не вызывается

Всякий раз, когда изменяется строка EditText, вызывается onTextChanged.

Теперь, когда я запускаю новый Activity и отправляю данные через Bundle, onTextChanged не вызывается.

if( getIntent().getExtras() != null) {
    Bundle b = getIntent().getExtras();
    int value = -1;

    if(b != null)
        value = b.getInt("key");
    edit1.setText("Mywords:");
}

Как я могу это назвать?


person phpdroid    schedule 28.08.2016    source источник


Ответы (3)


Итак, вот модифицированная версия вашего кода. Идея состоит в том, чтобы установить текст в EditText после того, как вы добавите к нему TextWatcher.

if( getIntent().getExtras() != null) {
    Bundle b = getIntent().getExtras();
    int value = -1;

    if(b != null)
        value = b.getInt("key");

    // Add  the TextWatcher here
    edit1.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {
            // Toast.makeText(MainActivity.this, "before text changed", Toast.LENGTH_LONG).show();
        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {
            // Toast.makeText(MainActivity.this, "on text changed", Toast.LENGTH_LONG).show();
        }

        @Override
        public void afterTextChanged(Editable s) {
            // Toast.makeText(MainActivity.this, "after text changed", Toast.LENGTH_LONG).show();
        }
    });

    // Now the set the value in your EditText
    edit1.setText("Mywords:");
}
person Reaz Murshed    schedule 28.08.2016
comment
Работает нормально. Спасибо - person Velayutham M; 31.01.2019
comment
Приятно знать, что помогло! - person Reaz Murshed; 31.01.2019

Убедитесь, что вы подписались с помощью TextWatcher до звонка setText.

person j2ko    schedule 28.08.2016
comment
вы имеете в виду реализацию класса TextWatcher? - person phpdroid; 28.08.2016
comment
Я имею в виду, что вызов edit1.addTextChangedListener должен быть до edit1.setText. - person j2ko; 28.08.2016

Попробуйте следующее:

edit1.addTextChangedListener(new TextWatcher() {

        public void afterTextChanged(Editable s) {}

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

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

Ссылка: android на прослушивателе изменения текста

person Mahmoud Ibrahim    schedule 28.08.2016
comment
я уже использовал его таким же образом, вы имеете в виду, что каждый раз, когда он меняет текст с помощью setText, мне нужно каждый раз создавать внутренний класс? - person phpdroid; 28.08.2016
comment
нет, вам не нужно создавать внутренний класс каждый раз, пожалуйста, дайте нам свой код, чтобы мы могли вам помочь. - person Mahmoud Ibrahim; 28.08.2016