Je code is een beetje moeilijk te begrijpen vanwege een slechte opmaak.
Hoe dan ook, het geleverde antwoord is eigenlijk geen oplossing. De cursor keerde terug op onLoadFinished
moet gegarandeerd niet worden gesloten, dus u laadt uw cursor op de verkeerde manier. In het bijzonder, wanneer u belt
adapter.getFilter().filter(s.toString());
Ik begrijp niet echt wat hier gebeurt, maar ik begrijp wel dat je iets anders moet doen. Sla het zoekfilter gewoon op in een veld in uw Fragment
en voer getLoaderManager().restartLoader(DRINKS_LIST_LOADER, null, this);
uit . Merk op dat u restartLoader
. uitvoert , en niet initLoader
, omdat u verschillende gegevens heeft waarnaar u wilt opvragen.
In uw onCreateLoader
, moet u het filter gebruiken dat u hebt opgeslagen als instantievariabele voor de selection
.
Wat achtergrond
initLoader
laadt de gegevens die in de laatste run zijn geladen, als deze eerder was uitgevoerd. Daarom schakel je de initialisatiemethode van je Fragment/Activiteit in. Dit is handig omdat u bij het wijzigen van de richting niet opnieuw hoeft te vragen.
restartLoader
ruimt eerder geladen gegevens op zodat u een nieuwe Loader
. krijgt om met (waarschijnlijk) verschillende gegevens te werken.
Als je nog niet echt zeker weet wat je aan het doen bent, lees dan dit artikel, dat een zeer goed inleidend artikel is over Loaders met voorbeeldcode die erg lijkt op wat je wilt bereiken. Laders zijn in het begin behoorlijk raadselachtig, maar als je het eenmaal onder de knie hebt, gaat het van een leien dakje.