Ihr Code ist aufgrund schlechter Formatierung etwas schwer zu verstehen.
Wie auch immer, die gelieferte Antwort ist eigentlich keine Lösung. Der Cursor kehrte bei onLoadFinished
zurück sollte garantiert nicht geschlossen werden, also laden Sie Ihren Cursor falsch. Insbesondere, wenn Sie anrufen
adapter.getFilter().filter(s.toString());
Ich verstehe nicht wirklich, was hier vor sich geht, aber ich verstehe, dass Sie etwas anderes tun sollten. Speichern Sie einfach den Abfragefilter in einem Feld in Ihrem Fragment
und führen Sie getLoaderManager().restartLoader(DRINKS_LIST_LOADER, null, this);
aus . Beachten Sie, dass Sie restartLoader
ausführen , und nicht initLoader
, weil Sie andere Daten haben, die Sie abfragen möchten.
In Ihrem onCreateLoader
verwenden, sollten Sie den Filter verwenden, den Sie als Instanzvariable für die selection
gespeichert haben .
Einige Hintergrundinformationen
initLoader
lädt die Daten, die beim letzten Lauf geladen wurden, falls dieser vorher gelaufen ist. Aus diesem Grund rufen Sie die Initialisierungsmethode Ihres Fragments/Ihrer Aktivität auf. Dies ist praktisch, da Sie die Ausrichtungsänderung nicht erneut abfragen müssen.
restartLoader
bereinigt zuvor geladene Daten, sodass Sie einen neuen Loader
erhalten mit (wahrscheinlich) anderen Daten zu arbeiten.
Wenn Sie sich immer noch nicht sicher sind, was Sie tun, sollten Sie unbedingt diesen Artikel lesen, der ein sehr guter Einführungsartikel zu Loadern mit Beispielcode ist, der dem entspricht, was Sie erreichen möchten. Lader sind anfangs ziemlich rätselhaft, aber sobald Sie den Dreh raus haben, geht es reibungslos.