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.

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

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.


11

In Kotlin sieht es so aus:

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

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

            }
        }
    });

Dies hat funktioniert, aber ich verstehe nicht, dass die obige Lösung für mich nicht funktioniert hat
shruti iyyer
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.