Evento para lidar com o foco do EditText

145

Alguém pode me sugerir algum evento relacionado ao foco do EditText? Meu aplicativo contém um EditText, que aceita um URL nele.

Agora, meu problema é que, depois que o usuário digitar a URL no campo e avançar, sem nenhum evento de clique, ou seja, quando o foco sair do EditText, ele deve detectar o URL inserido e ir para o servidor.

Se eu receber a resposta usando o Json Parsing, será mais conveniente.

Shelar Sheetal
fonte

Respostas:

519

Aqui está o exemplo do ouvinte de foco.

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
fonte
Nos fragmentos dentro do ouvinte de mudança de foco, não consigo atualizar minha interface do usuário, alguma ideia?
9133 moDev
2
Isso não funciona. Se o teclado foi ocultado por "enter" ou ocultar o botão do teclado em alguns dispositivos, o "perdeu o foco" não será acionado. Se você se concentrar em editar o texto novamente, ele também não apresentará "o foco".
SnowWolf 26/05
1
Lembre-se de que se o seu layout estiver configurado para redimensionar quando o teclado virtual for exibido ou fizer algo relacionado à interface do usuário usando um TextWatcher, o ouvinte poderá ser chamado muito - mesmo duas vezes para cada caractere digitado! stackoverflow.com/questions/14727248/…
M_M
12
  1. Declare o objeto EditText no topo da classe:

     EditText myEditText;
  2. Localize EditText na função onCreate e 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 bem.

Wajid khan
fonte
11

quando estiver no kotlin, ficará assim:

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

Para aqueles de nós que essa solução acima válida não funcionou, há outra solução alternativa aqui

 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
fonte
Isso funcionou, mas eu não entendo y acima solução não funcionou para mim
shruti iyyer