Domanda

Ho un codice in onItemSelect che modifica un EditText ma prima di farlo rimuovi il suo TextWatcher.Indipendentemente da quello immediatamente dopo aver modificato il EditText il metodo afterTextChanged è chiamato.Il mio metodo è qualcosa del genere:

   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;
      }
  }
.

Come posso Rimuovi l'ascoltatore?Se non lo rimuoverò, la cosa si chiama solo più volte.

È stato utile?

Soluzione

La soluzione è per avvisare il TextWatcher che si modifichi il testo del testo.Imposta questo flag (chiamalo enabled) prima di modificare il testo (invece di rimuovere il listener) e ripristinarlo quando viene eseguita la modifica.All'interno del tuo TextWatcher controlli se questo flag è impostato e se è così ignorare qualsiasi modifica.

class MyTextWatcher extends TextWatcher {

    boolean mIsEnabled = true;

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

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

    ...
} 
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top