Événement de gestion du focus de EditText

145

Quelqu'un peut-il me suggérer un événement lié à l'objectif de la EditText? Mon application contient un EditText, qui accepte une URL.

Maintenant, mon problème est que, après que l'utilisateur entrera l'URL dans le champ et se déplacera plus loin, sans aucun événement de clic, c'est-à-dire lorsque le focus se déplacera de EditText, il devrait détecter l'URL entrée et se diriger vers le serveur.

Si j'obtiens la réponse en utilisant Json Parsing, ce sera plus pratique.

Sheetal Shelar
la source

Réponses:

519

Voici l'exemple de l'écouteur de 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();
        }
    }
});
Pratik
la source
Dans les fragments de l'écouteur de changement de focus, je ne peux pas mettre à jour mon interface utilisateur, une idée?
moDev
2
Cela ne fonctionne pas. Si le clavier a été masqué par "Entrée" ou "Masquer le bouton du clavier" sur certains appareils, le message "Perdu le focus" ne sera pas déclenché. Si vous vous concentrez à nouveau sur la modification du texte, il ne classera pas non plus "obtenu le focus".
SnowWolf
1
Sachez que si votre mise en page est configurée pour être redimensionnée lorsque le clavier virtuel est affiché, ou si vous faites quelque chose lié à l'interface utilisateur à l'aide d'un TextWatcher, l'auditeur peut être appelé beaucoup - même deux fois pour chaque caractère saisi! stackoverflow.com/questions/14727248/…
M_M
12
  1. Déclarez l'objet de EditText en haut de la classe:

     EditText myEditText;
  2. Recherchez EditText dans la fonction onCreate et 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();
                    }
    
                }
            });

Ça fonctionne bien.

Wajid Khan
la source
11

quand à kotlin, cela ressemblera à ceci:

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

Pour ceux d'entre nous pour qui cette solution valide ci-dessus n'a pas fonctionné, il existe une autre solution de contournement ici

 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
la source
Cela a fonctionné mais je ne comprends pas que la solution ci-dessus ne fonctionne pas pour moi
shruti iyyer