我正在使用一个非常简单的CursorLoader和一个ImageDownloader。 ImageDownloader正在运行,除CursorLoader之外的所有内容都已完成,然后ImageDownloader开始下载图像,但GridView没有使用下载的图像进行更新..
在我的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 的行检索所有照片只是一种检索Cursor的方法,如下所示:
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;
}
因此,这是ListFragment的CursorLoader,它假定在返回Cursor时完成,这是正确的。根据我的理解, setAdapter()方法实际上会触发 getView 方法。
我遇到的麻烦是,一切似乎运行正常,我的日志输出正确输出图像的网址,断点都显示合法数据,问题但是,我的网格视图永远不会得到使用ImageDownloader检索的图像进行更新。
修改
这是我使用的SimpleCursorLoader
:https://gist.github.com/1217628
答案 0 :(得分:0)
问题很可能是您从父Fragment
管理Activity
的加载程序。 Activity
和Fragment
生命周期不会彼此同步(至少不是以可预测的方式),因此您调试问题的尝试实际上并没有让您到任何地方。保证可预测行为的最简单方法是让每个单独的组件都使用自己的LoaderManager
(而不是让Fragment
访问getActivity().getSupportLoaderManager()
)。
答案 1 :(得分:0)
与我的另一个问题一样......不应强制刷新,并且在使用提供程序时,您可以让提供程序通知contentresovler更新。我有一个插入新照片的方法,该方法使用数据提供程序。
需要数据提供者getContext().getContentResolver().notifyChange(uri, null);
实际更新光标。