Evento per la gestione del focus del EditText


145

Qualcuno può suggerirmi qualche evento legato al focus del EditText? La mia applicazione contiene un EditText, che accetta un URL al suo interno.

Ora il mio problema è che, dopo che l'utente inserirà l'URL nel campo e si sposterà ulteriormente, senza alcun evento di clic, ovvero quando lo stato attivo si sposterà da EditText, dovrebbe rilevare l'URL inserito e andare al server.

Se ricevo la risposta utilizzando Json Parsing, sarà più conveniente.

Risposte:


519

Ecco l'esempio di listener di focus.

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

In frammenti all'interno del listener del focus focus non sono in grado di aggiornare la mia UI, qualche idea?
MoDev,

2
Questo non funziona. Se la tastiera fosse nascosta da "invio" o nascondi il pulsante della tastiera su alcuni dispositivi, la "perdita della messa a fuoco" non verrà attivata. Se ti concentri di nuovo sulla modifica del testo, non verrà archiviato neanche "ottenuto lo stato attivo".
SnowWolf,

1
Tieni presente che se hai il layout impostato per ridimensionare quando viene visualizzata la tastiera virtuale o fai qualcosa correlato all'interfaccia utente utilizzando un TextWatcher, l'ascoltatore può essere chiamato molto, anche due volte per ogni carattere digitato! stackoverflow.com/questions/14727248/...
M_M

12
  1. Dichiara l'oggetto di EditText in cima alla classe:

     EditText myEditText;
  2. Trova EditText nella funzione onCreate e setOnFocusChangeListener di 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();
                    }
    
                }
            });

Funziona bene


11

quando in kotlin sarà simile a questo:

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

4

Per quelli di noi che questa soluzione valida sopra non ha funzionato, c'è un'altra soluzione qui

 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();

            }
        }
    });

Questo ha funzionato ma non capisco la soluzione di cui sopra non ha funzionato per me
shruti iyyer
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.