2011-02-07 2 views
9

Je dois faire quelque chose d'évident, mais je ne peux pas comprendre ce que c'est. J'essaye simplement d'insérer un caractère dans un éditable:Impossible d'insérer dans modifiable

@Override 
public void afterTextChanged(Editable s) { 
    Log.d(TAG, "inserting space at " + location); 
    s.insert(location, " "); 
    Log.d(TAG, "new word: '" + s + "'"); 
} 

Mais s ne change jamais. La chaîne 's' est assez longue, parce que je l'imprime et ça a l'air bien. Si j'appelle Editable.clear(), il est effacé, et je peux remplacer plusieurs caractères avec Editable.replace(). Des idées?

Répondre

25

J'ai trouvé le problème; J'ai mis le inputType en tant que "nombre" et ainsi l'addition de l'espace a échoué silencieusement.

+0

Est-il possible d'ajouter un espace à un EditText avec un inputType de "number"? –

+0

Oui, voir ma réponse ci-dessous; cela implique d'effacer temporairement les filtres d'entrée. – BeccaP

+1

Au lieu de 'number' vous pouvez utiliser' android: inputType = "phone" '. Il affiche les chiffres, mais avec des petites lettres à côté d'eux. Je dirais que les utilisateurs normaux ne reconnaîtront pas la différence. – Syex

1

Essayez:

Editable s = getLatestEditable(); 
Log.d(TAG, "inserting space at " + location); 
s.insert(location, " "); 
Log.d(TAG, "new word: '" + s + "'"); 
+0

Désolé non, getEditable() est ma propre méthode. En fait, il s'agit d'un rappel de TextWatcher.afterTextChanged (Editable s) –

9

Pour modifier un filtre éditable avec des filtres d'entrée, enregistrez simplement les filtres actuels, effacez-les, modifiez votre texte, puis restaurez les filtres.

Voici quelques exemples de code qui a fonctionné pour moi:

@Override 
public void afterTextChanged(Editable s) { 
    InputFilter[] filters = s.getFilters(); // save filters 
    s.setFilters(new InputFilter[] {});  // clear filters 
    s.insert(location, " ");    // edit text 
    s.setFilters(filters);     // restore filters 
} 
+0

Cela a fonctionné pour moi! Une solution bien meilleure que la réponse hacky acceptée. – CrashproofCode

Questions connexes