Получить редактируемый идентификатор в событии afterTextChanged - PullRequest
7 голосов
/ 10 мая 2011

У меня есть Activity, которая расширяет TextWatcher для обнаружения изменений в определенных EditTexts, поэтому он реализует:

public void afterTextChanged(Editable s)

Мой вопрос: если есть несколько EditTexts с набором .addTextChangedListener (this), как я могу отличить, какой из них был изменен, учитывая объект Editable в процедуре afterTextChanged?

Ответы [ 3 ]

11 голосов
/ 10 мая 2011

Другим вариантом, с меньшим количеством анонимных внутренних классов, было бы просто проверить текущую View. Если ваше приложение для TextWatcher зависит только от изменений, внесенных пользователем при вводе , то изменения всегда будут происходить в View, который имеет текущий фокус.Вызов getCurrentFocus() из любого места внутри Activity или Window вернет View, на который ориентирован пользователь.Внутри TextWatcher это почти наверняка будет конкретный EditText экземпляр.

SDK Docs Link

Надеюсь, что поможет!

2 голосов
/ 10 мая 2011

Существует один метод для реализации этого без создания TextWatcher объекта для каждого EditText, но я бы не стал его использовать:

protected void onCreate(Bundle savedInstanceState) {
    // initialization...

    EditText edit1 = findViewById(R.id.edit1);
    edit1.addTextChangedListener(this);
    EditText edit2 = findViewById(R.id.edit1);
    edit2.addTextChangedListener(this);
}

private static CharSequence makeInitialString(EditText edit) {
    SpannableStringBuilder builder = new SpannableStringBuilder();
    builder.setSpan(edit, 0, 0, Spanned.SPAN_MARK_MARK);
    return builder;
}

public void afterTextChanged(Editable s) {
    EditText[] edits = s.getSpans( 0, s.length(), EditText.class );
    if (edits.length != 1) {
        // this mustn't happen
    }

    // here's changed EditText
    EditText edit = edits[0];
}
0 голосов
/ 10 мая 2011

см. TextWatcher для более чем одного EditText , в основном создайте свой собственный класс для обработки слушателя с помощью конструктора, который определяет текст редактирования, который вы отслеживаете, и передаете текст редактирования, который вы назначаете.

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