Я хочу знать, как использовать CursorLoader
для заполнения виджетов на экране. Все примеры в Интернете предназначены только для использования адаптера, и это прекрасно работает. Что мне нужно, так это надежный способ обновления представлений на моем экране из курсора и в потоке пользовательского интерфейса, а также без сбоев из-за StaleDataException
или внезапной деактивации курсора. Вот мой текущий подход, но я все еще получаю отчеты о сбоях от пользователей.
@Override
public Loader<Cursor> onCreateLoader(int id, Bundle arg1) {
CursorLoader loader = null;
switch (id) {
case LOADER_ID_DATA:
loader = new CursorLoader(...);
break;
}
return loader;
}
@Override
public void onLoadFinished(Loader<Cursor> loader, final Cursor cursor) {
handler.post(new Runnable() {
@Override
public void run() {
if (getActivity() == null)
return;
updateView(cursor);
}
});
}
@Override
public void onLoaderReset(Loader<Cursor> arg0) {
}
Одним из решений было бы получить все поля курсора непосредственно внутри onLoadFinished и передать их обработчику для заполнения виджетов в потоке пользовательского интерфейса. Но это некрасиво, потому что у меня может быть много значений в курсоре. Я хотел бы найти надежный-безаварийный способ справиться со всем этим.