Ereignis zur Behandlung des Fokus des EditText

145

Kann mir jemand eine Veranstaltung vorschlagen, die sich auf den Schwerpunkt des EditText? Meine Anwendung enthält eine EditText, die eine URL darin akzeptiert.

Mein Problem ist nun, dass der Benutzer, nachdem er die URL in das Feld eingegeben und ohne das Klickereignis weiter verschoben hat, dh wenn sich der Fokus von der entfernt EditText, die eingegebene URL erkennt und zum Server wechselt.

Wenn ich die Antwort mit Json Parsing erhalte, ist dies bequemer.

Sheetal Shelar
quelle

Antworten:

519

Hier ist das Beispiel für den Fokus-Listener.

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
quelle
In Fragmenten im Focus Change Listener kann ich meine Benutzeroberfläche nicht aktualisieren. Irgendeine Idee?
MoDev
2
Das funktioniert nicht. Wenn die Tastatur bei einigen Geräten durch Drücken der Eingabetaste oder durch Ausblenden der Tastaturtaste ausgeblendet wurde, wird "Fokus verloren" nicht ausgelöst. Wenn Sie sich wieder auf das Bearbeiten von Text konzentrieren, wird auch nicht die Datei "Fokus erhalten" angezeigt.
SnowWolf
1
Beachten Sie, dass der Listener möglicherweise häufig angerufen wird, wenn Sie die Größe Ihres Layouts so einstellen, dass die Soft-Tastatur angezeigt wird, oder wenn Sie mit einem TextWatcher etwas mit der Benutzeroberfläche zu tun haben - sogar zweimal für jedes eingegebene Zeichen! stackoverflow.com/questions/14727248/…
M_M
12
  1. Deklarieren Sie das Objekt von EditText über der Klasse:

     EditText myEditText;
  2. Suchen Sie EditText in onCreate Function und setOnFocusChangeListener von 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();
                    }
    
                }
            });

Es funktioniert gut.

Wajid Khan
quelle
11

In Kotlin sieht es so aus:

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

Für diejenigen von uns, die diese oben gültige Lösung nicht funktioniert haben, gibt es hier eine weitere Problemumgehung

 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
quelle
Dies hat funktioniert, aber ich verstehe nicht, dass die obige Lösung für mich nicht funktioniert hat
shruti iyyer