É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.

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

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.


11

quand à kotlin, cela ressemblera à ceci:

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

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

            }
        }
    });

Cela a fonctionné mais je ne comprends pas que la solution ci-dessus ne fonctionne pas pour moi
shruti iyyer
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.