Váš kód je trochu obtížně pochopitelný kvůli špatnému formátování.
Každopádně poskytnutá odpověď ve skutečnosti není oprava. Kurzor se vrátil na onLoadFinished
by mělo být zaručeno, že nebude zavřený, takže kurzor načítáte nesprávným způsobem. Konkrétně když zavoláte
adapter.getFilter().filter(s.toString());
Moc nerozumím tomu, co se tu děje, ale chápu, že byste měli udělat něco jiného. Stačí uložit filtr dotazu do pole ve vašem Fragment
a spusťte getLoaderManager().restartLoader(DRINKS_LIST_LOADER, null, this);
. Všimněte si, že spustíte restartLoader
a ne initLoader
, protože máte jiná data, na která se chcete dotazovat.
Ve vašem onCreateLoader
, měli byste použít filtr, který jste uložili jako proměnnou instance pro selection
.
Nějaké pozadí
initLoader
načte data, která byla načtena při posledním spuštění, pokud byla spuštěna dříve. To je důvod, proč zavoláte inicializační metodu vašeho Fragmentu/Aktivity. To je užitečné, protože se nebudete muset znovu dotazovat na změnu orientace.
restartLoader
vyčistí dříve načtená data, takže získáte nový Loader
pracovat s (pravděpodobně) odlišnými daty.
Pokud si nejste opravdu jisti, co stále děláte, přečtěte si tento článek, což je velmi dobrý úvodní článek o Loaderech s ukázkovým kódem, který se velmi podobá tomu, čeho chcete dosáhnout. Nakladače jsou zpočátku docela záhadné, ale jakmile se do toho pustíte, plavba hladce.