2011-07-18 3 views
6

J'ai donc essayé d'implémenter TextWatcher pour Android et j'ai rencontré quelques problèmes avec le TextChangedListener appelé plusieurs fois ou dans une boucle infinie car je veux convertir le texte dans le EditText widget dans une chaîne au format monétaire.Supprimer TextChangedListener puis l'ajouter à nouveau

Ce que je l'ai fait travailler autour de cela était de créer ma propre TextWatcher personnalisé, puis en cas afterTextChanged a fait quelque chose comme le

suivant
public class CurrencyTextWatcher implements TextWatcher { 
    private EditText et; 

    public CurrencyTextWatcher(EditText editText) { 
     et = editText; 
    } 

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

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

    public void afterTextChanged(Editable s) { 
     et.removeTextChangedListener(this); 
     et.setText(myCurrencyString); 
     et.addTextChangedListener(this); 
    } 
}

Ma question est, est-il une meilleure façon de le faire? Je veux avoir le Widget EditText pour contenir où les modifications vont et la chaîne formatée qui en résulte.

Existe-t-il d'autres problèmes liés à la suppression et à l'ajout d'un objet TextChangedListener comme celui-ci?

Merci à l'avance

Répondre

3

Chaque fois que vous mettrez à jour (en appelant par exemple le texte fixe) votre editText le afterTextChanged sera appelé, donc je pense que vous devriez vous abstenir d'appeler setText chaque fois que vous êtes afterTextChanged et seulement appeler quand quelque chose change vraiment.

STH comme celui-ci

if (!myCurrencyString.equals(et.getText())) 
{ 
    et.setText(myCurrencyString); 
} 
+0

Ah, parfait .. ne peut pas croire que je ne pensais pas à cela. Je vous remercie – Jason

0

Que diriez-vous ci-dessous.

private void resetAddTagField() { 
    if (edtView != null && textWatcherListener != null) { 
     edtView.removeTextChangedListener(textWatcherListener); 
     edtView.setText(DEFAULT_TEXT);  

     edtView.addTextChangedListener(textWatcherListener); 
    } 
} 

Ce que j'apprends: Ne sous-estimez pas la puissance de TextWatcher: D: D

Questions connexes