AfterExtChanged chiamato anche dopo aver rimosso l'ascoltatore
-
26-12-2019 - |
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.
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