Ho implementato un programma di caricamento nella mia applicazione per interrogare i dati dal database. Ascolto i cambiamenti che accadono 'implementando il listener LoaderCallbacks<Cursor>
. Il problema che ho è quando si utilizza il metodo onLoaderReset(Loader<Cursor> loader)
quando i miei dati cambiano e voglio invalidare e liberare tutti i dati associati al caricatore. In tutti gli esempi, in questo metodo v'è la seguente chiamata:Caricatori e onLoaderReset Android
mAdapter.swapCursor(null);
Ma la cosa è io non uso i dati dal cursore adattatore, lo uso in qualche altro modo nella mia applicazione .
(direttamente dal cursore restituito in onLoadFinished(Loader<Cursor> loader, Cursor data)
, per esempio)
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor data) {
if (data.moveToFirst()) {
TOTAL_CARDS = data.getCount();
mView.createCards(TOTAL_CARDS);
} else {
TOTAL_CARDS = 0;
mView.createCards(TOTAL_CARDS);
}
}
Quale sarebbe la cosa corrispondente per fare qui, che è simile con mAdapter.swapCursor
. Non ho molta esperienza con i caricatori, infatti ho appena iniziato a lavorare con loro, quindi se qualcuno ha una soluzione a questo, lo apprezzerei. Grazie!
EDIT: Per ora, sto passando null per il caricatore e funziona, in questo modo:
@Override
public void onLoaderReset(Loader<Cursor> loader) {
loader = null;
}
};
Ma è questa la soluzione giusta?
Grazie per la risposta e la spiegazione. Solo una domanda veloce però.Se avessi un riferimento a un cursore in onLoadFinished (che userei al di fuori dell'ambito del metodo), dovrei chiuderlo in onLoaderReset, giusto? – Sandra
In realtà, no. Il loader chiuderà il riferimento "Cursore" per te. Questo è il motivo principale per cui dovresti rilasciare i riferimenti. Molto probabilmente non sarà possibile utilizzare il vecchio cursore dopo il ritorno dei metodi 'onLoadFinished (Loader, Cursor)'/'onLoaderReset (Loader)'. –
Quindi, che cosa è un buon caso d'uso per implementare il metodo onLoaderReset()? –