2011-02-07 15 views
9

Debo estar haciendo algo obvio, pero no puedo entender de qué se trata. Simplemente intento insertar un personaje en un Editable:No se puede insertar en Editable

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

Pero nunca cambia. La cadena 's' es lo suficientemente larga, porque la imprimo y se ve bien. Si llamo Editable.clear(), se borra, y puedo reemplazar varios caracteres con Editable.replace(). Ideas?

Respuesta

25

me encontré con el problema; Configuré inputType como "número" y, por lo tanto, agregué silenciosamente el espacio.

+0

¿Hay alguna forma de agregar un espacio a EditText con un inputType de "número"? –

+0

Sí, vea mi respuesta a continuación; implica borrar temporalmente los filtros de entrada. – BeccaP

+1

En lugar de 'number' puedes usar' android: inputType = "phone" '. Muestra los números, pero con letras pequeñas al lado de ellos. Yo diría que los usuarios normales no reconocerán la diferencia. – Syex

1

Probar:

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

En este momento no, getEditable() es mi método. En realidad, esta es una devolución de llamada de TextWatcher.afterTextChanged (Editable s) –

9

Para editar un editable con filtros de entrada, simplemente guarde los filtros actuales, desactívelos, edite su texto y luego restaure los filtros.

Aquí hay un código de ejemplo que funcionó para mí:

@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

¡Esto funcionó para mí! Una solución mucho mejor que la respuesta hacky aceptado. – CrashproofCode

Cuestiones relacionadas