Zaimplementowałem program ładujący w mojej aplikacji do wysyłania zapytań o dane z bazy danych. Słucham zmian, które nastąpiły "poprzez implementację detektora LoaderCallbacks<Cursor>
. Problemem, który mam, jest użycie metody onLoaderReset(Loader<Cursor> loader)
, gdy moje dane ulegają zmianie i chcę unieważnić i zwolnić wszelkie dane powiązane z modułem ładującym. We wszystkich przykładach, w tej metodzie jest następujące wezwanie:Ładowarki i onLoaderReset Android
mAdapter.swapCursor(null);
Ale chodzi o to, że nie należy używać danych z kursorem w adapterze, używam go w jakiś inny sposób, w mojej aplikacji .
(bezpośrednio od zwracanej kursora w onLoadFinished(Loader<Cursor> loader, Cursor data)
, na przykład)
@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);
}
}
Jaki byłby odpowiedni rzeczą do zrobienia tutaj, że jest podobna mAdapter.swapCursor
. Nie mam dużego doświadczenia z ładowarkami, w rzeczywistości właśnie zacząłem z nimi pracować, więc jeśli ktoś ma na to rozwiązanie, byłbym wdzięczny. Dzięki!
EDIT: Na razie jestem przechodzącej null ładowacza i działa tak:
@Override
public void onLoaderReset(Loader<Cursor> loader) {
loader = null;
}
};
Ale czy jest to właściwe rozwiązanie?
Dziękuję za odpowiedź i wyjaśnienie. Tylko szybkie pytanie.Gdybym miał odwołanie do kursora w funkcji onLoadFinished (którego użyłbym poza zasięgiem metody), powinienem zamknąć go w onLoaderReset, prawda? – Sandra
Właściwie nie. Program ładujący zamknie dla ciebie referencję 'Cursor'. To jest główny powód, dla którego powinieneś opublikować referencje. Najprawdopodobniej nie będziesz w stanie użyć starego kursora po powrocie metod 'onLoadFinished (Loader, Cursor)'/'onLoaderReset (Loader)'. –
Więc jaki jest dobry przypadek użycia implementacji metodyLoaderReset()? –