Saltar al contenido

Los eventos de TextWatcher se activan varias veces

Luego de mucho luchar hemos dado con la respuesta de este dilema que agunos usuarios de este espacio presentan. Si quieres compartir algún dato puedes aportar tu información.

Solución:

Tuve el mismo tipo de problema, cuando presioné la tecla de retroceso con el cursor al final de un texto continuo, después de que se llamara a TextChange 3 veces: – La primera vez con el valor s correcto – La segunda vez con un valor claro – La tercera vez con el valor correcto de nuevo

Después de buscar mucho en la web, traté de cambiar mi tipo de entrada EditText a

android:inputType="textNoSuggestions"

No me preguntes por qué, pero funcionó, afterTextChanged ahora se llama solo una vez.

boolean isOnTextChanged = false;

@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) 


@Override
public void onTextChanged(CharSequence s, int start, int before, int count) 
    isOnTextChanged = true;


@Override
public void afterTextChanged(Editable quantity) {
    if (isOnTextChanged) 
        isOnTextChanged = false;
       //dosomething
    

De acuerdo con las páginas de desarrolladores de TextWatcher, si se realiza un cambio en el Editable dentro TextWatcheractivará más llamadas a todos los TextWatchers vinculado a eso Editable. Ahora, claramente su código no desencadena este comportamiento.

Sin embargo, es muy posible que si, por cualquier razón, el sistema tiene un TextWatcher sobre el Editable, la situación que describe puede ocurrir. “¿Por qué”, te escucho llorar, “debería suceder esto?”

Primero, la defensa clásica: no hay razón para que no suceda y, estrictamente, el código de la aplicación debe escribirse para que sea resistente.

En segundo lugar, no puedo probarlo, pero bien podría imaginar que el código que maneja el diseño del texto mostrado dentro de un EditText usa un TextWatcher para manejar la actualización de la visualización del texto en la pantalla. Este código podría insertar códigos de control (que no se muestran) en el Editable para asegurar buenos saltos de línea y así sucesivamente. Incluso puede dar varias vueltas para hacerlo bien, y es posible que solo reciba su primera llamada después de que haya hecho todas sus…

EDITAR

Según el comentario de @Learn OpenGL ES, llamar a un TextWatcher sería normal para cosas como la autocorrección.

Te invitamos a añadir valor a nuestro contenido participando con tu experiencia en las observaciones.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *