2013-02-09 5 views
2

J'ai un TextWatcher sur un EditText. Dans beforeTextChanged, je trouve que la valeur EditText a déjà été modifiée. Voici un petit bout de code:dans beforeTextChange, valeur déjà modifiée

@Override 
public void beforeTextChanged (CharSequence s, int start, int lengthBefore, int lengthAfter) 
{ 
//  restoreValue = text.getText().toString(); 
    String restoreValue = s.toString(); 
    System.out.println ("restore |" + restoreValue + "|"); 
} 

Dans cette fonction, la sortie de débogage montre une chaîne modifiée, et non la valeur d'origine du EditText. C'est la même chose si j'obtiens la valeur de "texte" (qui est le widget EditText) ou de "s".

Quelqu'un a une raison possible pour cela?

+0

Un peu plus d'infos: quand je fais une opération de collage, beforeTextChanged est appelé deux fois. La première fois, cela montre qu'un espace est ajouté à la fin du segment sélectionné. La deuxième fois est la pâte réelle. La première fois - en insérant l'espace - c'est bizarre. J'ai besoin de l'ignorer, en quelque sorte ... –

Répondre

1

Active la réponse est simple. Android essaie d'être intelligent, en supposant que votre insertion est censée être un mot, et en ajoutant un espace pour le séparer de l'autre texte. Ainsi, il insère d'abord l'espace (éventuellement deux espaces - un à chaque extrémité de la zone sélectionnée), puis insère le texte du tampon de collage.

Chacune de ces actions provoque un appel distinct à beforeTextChanged. Idem pour onTextChanged et afterTextChanged. Donc, pour une action de collage, vous pouvez obtenir jusqu'à trois ensembles de rappels.

1

essayez le code suivant qu'il fonctionne

public void onTextChanged(CharSequence s, int start, int before, int count) { 
       // TODO Auto-generated method stub 
       if(count>0) 
       Log.e("MIS",""+s.toString().substring(0,count-1)); 
      } 
+0

Vous n'avez rien d'autre que des souches autogénérées. –

+0

Désolé, ça ne va pas aider non plus. Le problème, comme je l'ai indiqué ci-dessus, est que les actions de collage provoquent deux appels à onTextChanged, l'un d'eux avec une insertion vide à l'extrémité droite de la zone de collage. –

Questions connexes