Mam do czynienia z problemem z Loader.Android - onLoadFinished nie nazywa się
Mam działanie, które wyświetla listę rekordów pobranych z lokalnego DB. Po rozpoczęciu działania rekordy są ładowane automatycznie za pomocą metody LoaderManager.initLoader().
Istnieje również możliwość ręcznego odświeżenia listy za pomocą przycisku odświeżania w ActionBarSherlock. Jednak po zakończeniu innej czynności, która dodaje rekord do DB, onLoadFinished nie jest wywoływany.
Używam SimpleCursorLoader A oto fragment kodu z działalności:
@Override
public void onStart() {
...
getSupportLoaderManager().initLoader(0, null, this);
}
@Override
public void onPause() {
...
getSupportLoaderManager().destroyLoader(0);
}
public void refreshRecords() {
getSupportLoaderManager().restartLoader(0, null, this);
}
@Override
public Loader<Cursor> onCreateLoader(int id, final Bundle args) {
Loader<Cursor> l = new SimpleCursorLoader(this) {
@Override
public Cursor loadInBackground() {
return recordDAO.getCursor();
}
};
l.forceLoad();
return l;
}
@Override
public void onLoadFinished(Loader<Cursor> loader, Cursor c) {
// updateUI
}
@Override
public void onLoaderReset(Loader<Cursor> loader) {
}
Kwestia jest taka, że po zakończeniu innej działalności, onLoaderCreate
nazywa, ale onLoaderFinished
nie nazywa.
po pewnym debugowania Znalazłem że SimpleCursorAdapter.deliverResults()
nazywany jest również, bud kończy się na .. if (isReset()) { ..
Am I czegoś brakuje? Jak wymusić przeładowanie danych?
góry dziękuję
pracuje dla mnie. Dziękuję Ci. –
Nie działa dla mnie! – Radu
Prawie poprawne rozwiązanie: jak wspomniano na https://groups.google.com/forum/#!topic/android-developers/DbKL6PVyhLI (i eksperymentowałem z nim), warunkiem resetowania jest! Loader.isReset(), czyli "Powinieneś uruchomić ponownie program ładujący, jeśli program ładujący NIE JEST zresetowany." (napisany przez Etienne). Zaktualizuj swoją odpowiedź. – Pascal