2014-01-11 2 views
0

У меня есть код в onItemSelect, который изменяет EditText, но перед этим я удаляю его TextWatcher. Независимо от того, что сразу после изменения EditText вызывается метод afterTextChanged. Мой метод что-то вроде этого:AfterTextChanged, вызванный даже после удаления слушателя

public void onItemSelected(AdapterView<?> adapterView, View view, int position, long id) { 
     switch (adapterView.getId()) { 
      case R.id.someId: 
      // Remove the listener 
      // make changes to the EditText 
      // add the listener 

      break; 
     } 
    } 

Как я могу действительно удалить слушатель? Если я не удалю его, вещь просто называет себя больше раз.

ответ

2

Решение должно извещение вашего TextWatcher о том, что вы собираетесь изменить текст программно. Установите этот флаг (вызовите его enabled) перед редактированием текста (вместо удаления слушателя) и сбросьте его, когда будет выполнена модификация. В пределах вашего TextWatcher вы проверяете, установлен ли этот флаг и если они игнорируют какие-либо изменения.

class MyTextWatcher extends TextWatcher { 

    boolean mIsEnabled = true; 

    public void setEnabled(boolean enabled) { 
     mIsEnabled = enabled; 
    } 

    @Override 
    protected afterTextChanged(Editable s) { 
     if (!enabled) return; 
     ... 
    } 

    ... 
} 
Смежные вопросы