es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

A medida que el usuario comienza a escribir en un EditText, ¿puede agregar una extensión de archivo al final?

Problema: He estado intentando sin éxito agregar una extensión de archivo que siga al cursor en tiempo real mientras el usuario escribe.

Lo que he intentado: He estado intentando usar .addTextChangedListener(), que creo que es correcto, pero tengo un problema para hacer que la idea funcione. La depuración muestra que se está ejecutando en un bucle continuo, lo que da la apariencia de congelarse. Miré algunos mensajes aquí en el foro, pero los que sugirieron cuando ingresé este título de publicación trataban sobre prefijos y no sufijos.

Campo de EditText con área resaltada que representa el texto a seguir a la derecha del cursor:

EditText

Uno de mis intentos fallidos para hacer que funcione:

private void setupAddDBEditText(){

    mDBToAdd.addTextChangedListener(new TextWatcher() {
        @Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        @Override
        public void afterTextChanged(Editable s) {
            if(s.toString().contains(".db"))
                mDBToAdd.setText(s.toString().substring(0,s.toString().length()-3));
            mDBToAdd.setText(s + ".db");
        }
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Solución:

    Para añadir una extensión de archivo que siga el cursor en tiempo real mientras el usuario teclea en un campo EditText, se puede utilizar el método .addTextChangedListener() en combinación con una bandera booleana para verificar si la extensión ya ha sido añadida. Aquí tienes una implementación de ejemplo:

    private boolean extensionAdded = false;
    
    private void setupEditText() {
        final String FILE_EXTENSION = ".txt"; // Cambia esto por la extensión de archivo deseada
    
        mEditText.addTextChangedListener(new TextWatcher() {
            @Override
            public void beforeTextChanged(CharSequence s, int start, int count, int after) {
    
            }
    
            @Override
            public void onTextChanged(CharSequence s, int start, int before, int count) {
    
            }
    
            @Override
            public void afterTextChanged(Editable s) {
                if (!extensionAdded && s.length() > 0 && !s.toString().endsWith(FILE_EXTENSION)) {
                    // Añadir la extensión de archivo al final del texto
                    s.append(FILE_EXTENSION);
                    extensionAdded = true;
                } else if (extensionAdded && s.length() > FILE_EXTENSION.length() && s.toString().endsWith(FILE_EXTENSION)) {
                    // Eliminar la extensión de archivo del final del texto
                    s.delete(s.length() - FILE_EXTENSION.length(), s.length());
                    extensionAdded = false;
                }
            }
        });
    }
    

    En este ejemplo, la bandera booleana extensionAdded se utiliza para evitar añadir la extensión de archivo repetidamente y causar un bucle infinito. La constante FILE_EXTENSION se puede cambiar por la extensión de archivo deseada. El método onTextChanged() no se utiliza en este ejemplo, pero se puede implementar si es necesario.

Comments are closed.