0

Я использую очень простой CursorLoader с ImageDownloader. ImageDownloader работает и все, кроме CursorLoader отделки, а затем ImageDownloader начинает свою работу по загрузке изображений, но GridView не обновляется с загруженными изображениями ..Android Combine ImageDownload with CursorLoader

В моей ListFragment я следующий onActivityCreated метода :

@Override 
public void onActivityCreated(Bundle savedInstanceState) { 
    Log.d(TAG, "onActivityCreated"); 

    super.onActivityCreated(savedInstanceState); 

    cursorAdapter = new OURSVPImageAdapter(getActivity(), null); 

    // set the adapter on the gridview 
    mGridView.setAdapter(cursorAdapter); 

    // load the data 
    getActivity().getSupportLoaderManager().initLoader(2, null, this); 
} 

Мой CursorLoader выглядит следующим образом:

public static final class PhotoCursorLoader extends SimpleCursorLoader { 

    Context mContext; 

    public PhotoCursorLoader(Context context) { 
     super(context); 

     Log.d("PhotoCursorLoader", "Constructor"); 

     mContext = context; 
    } 

    @Override 
    public Cursor loadInBackground() { 
     Log.d("PhotoCursorLoader", "loadInBackground"); 

     PhotosDataSource datasource = new PhotosDataSource(mContext); 

     # STEP 1 
     return datasource.getAllPhotos(((EventActivity) mContext).getEventId()); 
    } 

} 

в строке # STEP 1, который извлекает все фотографии просто метод, который возвращает курсор, как показано здесь:

public Cursor getAllPhotos(long event_id) { 
    Log.d(TAG, "getAllPhotos"); 

    Cursor mCursor = getWritableDatabase().query(true, TABLE_NAME, COLUMNS_PHOTOS, DatabaseConstants.KEY_EVENT_ID + "=" + event_id, 
      null, null, null, null, null); 

    return mCursor; 
} 

Таким образом, это будучи CursorLoader для ListFragment, она принимает его завершенным, когда что курсор возвращается, который является правильным , С моей точки зрения метод setAdapter() - это то, что на самом деле вызовет метод getView.

Проблема, с которой я столкнулся, заключается в том, что все, кажется, работает нормально, мой выход в журнал выводит правильные URL-адреса для изображений, точки останова, отображающие законные данные, Проблема заключается в том, что мой сетчатый просмотр никогда не обновляется с изображениями, которые извлекает ImageDownloader.

EDIT Это SimpleCursorLoader я использую: https://gist.github.com/1217628

ответ

0

Как и в случае с другим из моих вопросов .. обновление не должно быть принудительным, а при использовании провайдера вы можете предоставить провайдеру уведомление о содержимом обновлений. У меня есть метод, который вставляет новые фотографии, и этот метод использует поставщика данных. Поставщик данных, необходимый для заказа

getContext().getContentResolver().notifyChange(uri, null); 

для фактического обновления курсора.

0

Еще раз, проблема, скорее всего, что вы управляете загрузчики ваших Fragment «S от родителя Activity. Жизненные циклы Activity и Fragment не синхронизируются друг с другом (по крайней мере, не предсказуемым образом), поэтому ваши попытки отладки проблемы на самом деле не доставят вас никуда. Самый простой способ гарантировать предсказуемое поведение состоит в том, чтобы каждый отдельный компонент использовал свой собственный LoaderManager (в отличие от доступа Fragment s getActivity().getSupportLoaderManager()).

+0

Я думаю, что одно из главных отличий в том, к чему вы привыкли, и что делает мой код, это то, что я использую ActionbarSherlock .., который использует библиотеку поддержки .. @Overrides и методы недоступны иногда .. как .. Мне нужно использовать getSupportLoaderManager NOT getLoaderManager .. – Rabbott

+0

Он работает так же с 'ActionBarSherlock'. Пока вы согласны в использовании той же самой реализации «LoaderManager» (будь то из библиотеки поддержки или официального Android SDK), моя точка по-прежнему сохраняется. Тем не менее я изменил 'getLoaderManager' на' getSupportLoaderManager' в моем ответе. –

+0

* Жизненные циклы Activity и Fragment не синхронизируются друг с другом * и текст с сайта разработчика Android: * Жизненный цикл активности, в котором живет фрагмент, напрямую влияет на жизненный цикл фрагмента, так что каждый обратный вызов жизненного цикла для активности приводит к аналогичному обратному вызову для каждого фрагмента. Например, когда активность получает onPause(), каждый фрагмент в активности получает onPause(). *? – Luksprog