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.

Shelar Shelar
fuente

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();
        }
    }
});
Pratik
fuente
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.

Wajid khan
fuente
11

cuando en kotlin se verá así:

editText.setOnFocusChangeListener { view, hasFocus ->
        if (hasFocus) toast("focused") else toast("focuse lose")
    }
arjava
fuente
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();

            }
        }
    });
Dev_Man
fuente
Esto funcionó, pero yo no entiendo y por encima de la solución no funcionó para mí
Shruti iyyer