Jak dynamicznie dodawać sugestie do autouzupełniania widoku tekstowego z zachowaniem statusu znaku
Opis problemu:
Stoję przed pewnym problemem z AutoCompleteTextView, gdzie muszę pokazywać sugestie po każdym naciśnięciu klawisza. Rzecz w tym, że lista sugestii jest dynamiczna, jak funkcja sugestii Google. Oznacza to, że nowe sugestie powinny być dodawane podczas wpisywania przez użytkownika, a wszystkie pasujące stare sugestie powinny być wyświetlane.
Na przykład
Piszę „te”, a następnie powinien wyświetlać poprzednie sugestie, takie jak „test1” i „test2” oraz nowe sugestie, które otrzymam z Web API. Załóżmy, że web api daje mi słowo „herbata” i „napięcie”.
Teraz AutoCompleteTextView będzie miał „te” jako łańcuch ze wszystkimi czterema sugestiami pokazanymi poniżej.
To jest dokładnie to, czego szukam.
wygląda prosto, ale pokazuje dziwne zachowanie.
Używam domyślnej instancji klasy ArrayAdapter, której deklaruję globalnie.
arrayAdapter=new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line,suggestions);
word.setAdapter(arrayAdapter);
sugestie to ArrayList.
Po otrzymaniu nowego wyniku z WebApi po prostu dzwonię
arrayAdapter.notifyDataSetChanged();
aby odświeżyć obserwatora danych i załączone widoki (w naszym przypadku AutoCompleteListView).
Ale zamyka sugestie.
Kiedy nie używamnotifyDataSetChanged();
pokazuje wszystkie sugestie niezależnie od wpisanych znaków.
Próbowałem go z niestandardowym filtrem, jak sugerowało wielu, ale żaden z nich nie jest pomocny, ponieważ nie mogłem użyć notifyDataSetChanged ().
Zamieszczam obraz, aby uniknąć nieporozumień.
Mam zamieszanie, dlaczegonotifyDataSetChanged();
to nie działa. Nie użyłem żadnego innego odwołania do listy z tą samą instancją arrayAdapter. Naprawdę wątpię, czy to problem odniesienia.