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.