Votre code est un peu difficile à comprendre en raison d'un mauvais formatage.
Quoi qu'il en soit, la réponse fournie n'est en fait pas une solution. Le curseur est retourné à onLoadFinished
devrait être garanti de ne pas être fermé, vous chargez donc votre curseur de la mauvaise manière. Plus précisément, lorsque vous appelez
adapter.getFilter().filter(s.toString());
Je ne comprends pas vraiment ce qui se passe ici, mais je comprends que vous devriez faire autre chose. Stockez simplement le filtre de requête dans un champ de votre Fragment
et exécutez getLoaderManager().restartLoader(DRINKS_LIST_LOADER, null, this);
. Notez que vous exécutez restartLoader
, et non initLoader
, car vous souhaitez interroger différentes données.
Dans votre onCreateLoader
, vous devez utiliser le filtre que vous avez stocké en tant que variable d'instance pour la selection
.
Un peu de contexte
initLoader
charge les données qui ont été chargées lors de la dernière exécution, si elles avaient été exécutées auparavant. C'est pourquoi vous appelez dans la méthode d'initialisation de votre Fragment/Activity. C'est pratique car vous n'aurez pas à redemander le changement d'orientation.
restartLoader
nettoie les données précédemment chargées afin que vous obteniez un nouveau Loader
pour travailler avec des données (probablement) différentes.
Si vous n'êtes toujours pas sûr de ce que vous faites, assurez-vous de lire cet article, qui est un très bon article d'introduction sur les chargeurs avec un exemple de code qui ressemble beaucoup à ce que vous voulez réaliser. Les chargeurs sont assez énigmatiques au début, mais une fois que vous avez compris, tout se passe bien.