Заполнение виджетов курсором в onLoadFinished()

Я хочу знать, как использовать 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 и передать их обработчику для заполнения виджетов в потоке пользовательского интерфейса. Но это некрасиво, потому что у меня может быть много значений в курсоре. Я хотел бы найти надежный-безаварийный способ справиться со всем этим.

6
задан Catalin Morosan 11 April 2012 в 12:27
поделиться