Wiem trochę o TextWatcher
tym, ale to działa na każdą postać, którą wchodzisz. Chcę odbiornika, który uruchamia się za każdym razem, gdy użytkownik kończy edycję. Czy to możliwe? Również w TextWatcher
otrzymuję instancję Editable
ale muszę instancję EditText
. Jak to osiągnąć?
EDYCJA : drugie pytanie jest ważniejsze. Proszę, odpowiedz na to.
Odpowiedzi:
Po pierwsze, możesz sprawdzić, czy użytkownik zakończył edycję tekstu, jeśli
EditText
utraci fokus lub jeśli naciśnie przycisk Gotowe (zależy to od implementacji i tego, co jest dla Ciebie najlepsze). Po drugie, nie możesz uzyskaćEditText
instancji w ramachTextWatcher
tylko wtedy, gdy zadeklarowałeśEditText
jako obiekt instancji. Nawet jeśli nie powinieneś edytować plikuEditText
wewnątrz,TextWatcher
ponieważ nie jest to bezpieczne.EDYTOWAĆ:
Aby móc wprowadzić
EditText
instancję do swojejTextWatcher
implementacji, powinieneś spróbować czegoś takiego:Zauważ, że powyższy przykład może zawierać błędy, ale chciałem tylko pokazać przykład.
źródło
Martwiło mnie, że zaimplementowanie odbiornika dla wszystkich moich pól EditText wymagało posiadania brzydkiego, rozwlekłego kodu, więc napisałem poniższą klasę. Może się przydać każdemu, kto się na to natknie.
Wdrożenie słuchacza jest teraz trochę czystsze.
Jeśli chodzi o to, jak często się uruchamia, można by zaimplementować sprawdzenie, aby uruchomić żądany kod
//Do stuff
po określonym aźródło
Każdy, kto używa ButterKnife . Możesz użyć takich jak:
źródło
Zrobiłem to używając
AutotextView
:źródło
źródło
TextWatcher
nie zadziałało dla mnie, ponieważ ciągle strzelało do każdegoEditText
i nawzajem zepsuło wartości.Oto moje rozwiązanie:
W związku z tym, używając tej
getChildAt(xx)
metody, możesz pobrać dowolny element wListView
i uzyskać pojedynczy element za pomocąfindViewById
. Następnie poda najnowszą wartość.źródło
O ile mogę o tym myśleć, są tylko dwa sposoby, aby to zrobić. Skąd możesz wiedzieć, że użytkownik skończył pisać słowo? Albo po utracie fokusu, albo po kliknięciu przycisku „OK”. Nie sądzę, żebyś wiedział, że użytkownik nacisnął ostatnią postać ...
Więc zadzwoń
onFocusChange(View v, boolean hasFocus)
lub dodaj do niego przycisk i odbiornik kliknięć.źródło
Metoda Watcher odpala przy każdym wprowadzeniu znaku. Tak więc zbudowałem ten kod w oparciu o metodę onFocusChange:
Aby z niego skorzystać, po prostu zadzwoń w ten sposób:
Możesz zignorować funkcję comS, zastępując! ComS (dat.s, "" + EdTe.getText ()) funkcją! Equal. Jednak sama funkcja równości czasami nie działa poprawnie w czasie wykonywania.
Odbiornik onChange zapamięta stare dane EditText, gdy użytkownik fokusuje pisanie, a następnie porówna nowe dane, gdy użytkownik straci fokus lub przeskoczy do innego wejścia. Jeśli porównując stary ciąg, a nie ten sam nowy ciąg, uruchamia pracę.
Jeśli masz tylko 1 EditText, będziesz musiał stworzyć funkcję ClearFocus, tworząc Ultimate Secret Transparent Micro EditText 😸 poza oknami 😽 i zażądaj skupienia się na nim, a następnie ukryj klawiaturę za pomocą Import Method Manager.
źródło