Zdarzenie do obsługi fokusu EditText

145

Czy ktoś może zasugerować mi jakieś wydarzenie związane z tematem EditText? Moja aplikacja zawiera EditText, który akceptuje w niej adres URL.

Teraz mój problem polega na tym, że po wpisaniu przez użytkownika adresu URL w polu i przejściu dalej, bez żadnego zdarzenia kliknięcia, czyli gdy fokus przesunie się z pola EditText, to powinien wykryć wpisany adres URL i przejść na serwer.

Jeśli otrzymam odpowiedź za pomocą Json Parsing, będzie to wygodniejsze.

Sheetal Shelar
źródło

Odpowiedzi:

519

Oto przykład aktywnego słuchacza.

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
źródło
We fragmentach wewnątrz nasłuchiwania zmian fokusu nie mogę zaktualizować interfejsu użytkownika, masz jakiś pomysł?
moDev
2
To nie działa. Jeśli klawiatura została ukryta przez „enter” lub ukryj przycisk klawiatury na niektórych urządzeniach, „utracona fokus” nie zostanie uruchomiona. Jeśli ponownie skupisz się na edycji tekstu, nie zostanie on również zapisany jako „ma fokus”.
SnowWolf
1
Pamiętaj, że jeśli masz ustawiony układ tak, aby zmieniał rozmiar, gdy wyświetlana jest klawiatura programowa, lub robisz coś związanego z interfejsem użytkownika za pomocą TextWatchera, słuchacz może być często wywoływany - nawet dwa razy dla każdego wpisanego znaku! stackoverflow.com/questions/14727248/…
M_M
12
  1. Zadeklaruj obiekt EditText na szczycie klasy:

     EditText myEditText;
  2. Znajdź EditText w funkcji onCreate i setOnFocusChangeListener of 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();
                    }
    
                }
            });

To działa dobrze.

Wajid khan
źródło
11

kiedy w kotlinie będzie wyglądać tak:

editText.setOnFocusChangeListener { view, hasFocus ->
        if (hasFocus) toast("focused") else toast("focuse lose")
    }
arjava
źródło
4

Dla tych z nas, którym powyższe poprawne rozwiązanie nie zadziałało, istnieje tutaj inne obejście

 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
źródło
To zadziałało, ale nie rozumiem, że powyższe rozwiązanie nie zadziałało dla mnie
shruti iyyer