2011-02-07 12 views
9

Devo fare qualcosa di ovvio, ma non riesco a capire di cosa si tratta. Sto semplicemente cercando di inserire un personaggio in una modificabile:Impossibile inserire in Modificabile

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

Ma s non cambia mai. La stringa 's' è abbastanza lunga, perché la stampo e sembra buona. Se chiamo Editable.clear(), viene cancellato e posso sostituire più caratteri con Editable.replace(). Idee?

risposta

25

ho trovato il problema; Ho impostato inputType come "numero" e quindi l'aggiunta dello spazio non è riuscita.

+0

C'è un modo per aggiungere uno spazio a un EditText con un inputType di "number"? –

+0

Sì, guarda la mia risposta qui sotto; comporta la cancellazione temporanea dei filtri di input. – BeccaP

+1

Invece di 'numero' potresti usare' android: inputType = "phone" '. Visualizza i numeri, ma con lettere minuscole accanto a loro. Direi che gli utenti normali non riconosceranno la differenza. – Syex

1

Prova:

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

Spiacente, non, getEditable() è il mio metodo. In realtà questo è un callback da TextWatcher.afterTextChanged (Modificabile s) –

9

Per modificare un elemento modificabile con filtri di input, è sufficiente salvare i filtri correnti, cancellarli, modificare il testo e ripristinare i filtri.

Ecco alcuni esempi di codice che ha funzionato per me:

@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

Questo ha funzionato per me! Una soluzione molto migliore rispetto alla risposta hacky accettata. – CrashproofCode

Problemi correlati