Twój kod jest trochę trudny do zrozumienia ze względu na słabe formatowanie.
W każdym razie dostarczona odpowiedź w rzeczywistości nie jest poprawką. Kursor zwrócony w onLoadFinished
powinno być zagwarantowane, że nie zostanie zamknięte, więc ładujesz kursor w niewłaściwy sposób. W szczególności, gdy zadzwonisz
adapter.getFilter().filter(s.toString());
Naprawdę nie rozumiem, co się tutaj dzieje, ale rozumiem, że powinieneś zrobić coś innego. Po prostu zapisz filtr zapytania w polu w swoim Fragment
i uruchom getLoaderManager().restartLoader(DRINKS_LIST_LOADER, null, this);
. Zauważ, że uruchamiasz restartLoader
, a nie initLoader
, ponieważ masz inne dane, o które chcesz zapytać.
W swoim onCreateLoader
, powinieneś użyć filtra, który zapisałeś jako zmienną instancji dla selection
.
Niektóre tło
initLoader
ładuje dane, które zostały załadowane w ostatnim przebiegu, jeśli były uruchamiane wcześniej. Dlatego wywołujesz metodę inicjalizacji swojego fragmentu/działania. Jest to przydatne, ponieważ nie musisz ponownie pytać o zmianę orientacji.
restartLoader
czyści poprzednio załadowane dane, dzięki czemu otrzymujesz nowy Loader
pracować z (prawdopodobnie) różnymi danymi.
Jeśli nadal nie jesteś pewien, co robisz, koniecznie przeczytaj ten artykuł, który jest bardzo dobrym artykułem wprowadzającym na temat programów ładujących z przykładowym kodem, który wygląda bardzo podobnie do tego, co chcesz osiągnąć. Ładowarki są na początku dość enigmatyczne, ale kiedy już to opanujesz, płynie się gładko.