Evento para manejar el foco del EditText


145

¿Alguien puede sugerirme algún evento relacionado con el enfoque de la EditText? Mi aplicación contiene un EditText, que acepta una URL.

Ahora mi problema es que, después de que el usuario ingrese la URL en el campo y se mueva más lejos, sin ninguno de los eventos de clic, es decir, cuando el foco se mueva desde el EditText, debe detectar la URL ingresada y va al servidor.

Si recibo la respuesta usando Json Parsing, entonces será más conveniente.

Respuestas:


519

Aquí está el ejemplo del oyente de enfoque.

editText.setOnFocusChangeListener(new OnFocusChangeListener() {
    @Override
    public void onFocusChange(View view, boolean hasFocus) {
        if (hasFocus) {
            Toast.makeText(getApplicationContext(), "Got the focus", Toast.LENGTH_LONG).show();
        } else {
            Toast.makeText(getApplicationContext(), "Lost the focus", Toast.LENGTH_LONG).show();
        }
    }
});

En fragmentos dentro de focus change listener, no puedo actualizar mi interfaz de usuario, ¿alguna idea?
moDev

2
Esto no funciona. Si el teclado se oculta mediante "enter" u oculta el botón del teclado en algunos dispositivos, no se activará el "perdido el foco". Si vuelve a centrarse en editar texto, tampoco archivará "consiguió el foco".
SnowWolf

1
Tenga en cuenta que si tiene su diseño configurado para cambiar el tamaño cuando se muestra el teclado virtual, o si hace algo relacionado con la interfaz de usuario utilizando un TextWatcher, el oyente puede recibir muchas llamadas, ¡incluso dos veces por cada carácter escrito! stackoverflow.com/questions/14727248/…
M_M

12
  1. Declarar objeto de EditText en la parte superior de la clase:

     EditText myEditText;
  2. Encuentra EditText en onCreate Function y setOnFocusChangeListener de EditText:

    myEditText = findViewById(R.id.yourEditTextNameInxml); 
    
    myEditText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
                @Override
                public void onFocusChange(View view, boolean hasFocus) {
                    if (!hasFocus) {
                         Toast.makeText(this, "Focus Lose", Toast.LENGTH_SHORT).show();
                    }else{
                        Toast.makeText(this, "Get Focus", Toast.LENGTH_SHORT).show();
                    }
    
                }
            });

Funciona bien.


11

cuando en kotlin se verá así:

editText.setOnFocusChangeListener { view, hasFocus ->
        if (hasFocus) toast("focused") else toast("focuse lose")
    }

4

Para aquellos de nosotros que esta solución válida anterior no funcionó, hay otra solución aquí

 searchView.setOnQueryTextFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(View view, boolean isFocused) {
            if(!isFocused)
            {
                Toast.makeText(MainActivity.this,"not focused",Toast.LENGTH_SHORT).show();

            }
        }
    });

Esto funcionó, pero yo no entiendo y por encima de la solución no funcionó para mí
Shruti iyyer
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.