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.

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

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.


11

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

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

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

            }
        }
    });

To zadziałało, ale nie rozumiem, że powyższe rozwiązanie nie zadziałało dla mnie
shruti iyyer
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.