我使用的是一个非常简单的CursorLoader和一个ImageDownloader。ImageDownloader正在运行,除了CursorLoader之外,一切都完成了,然后ImageDownloader开始了下载图像的工作,但是GridView没有使用下载的图像进行更新。
在我的onActivityCreated中,我有以下ListFragment方法:
@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方法。
我遇到的问题是,一切似乎都很好,我的日志输出正在正确地输出图像的urls,断点都显示合法的数据,的问题是,我的网格视图从未被ImageDownloader检索的图像更新。
编辑这是我正在使用的SimpleCursorLoader:https://gist.github.com/1217628
发布于 2012-09-26 16:31:52
和我的另一个问题一样。不应该强制刷新,在使用提供程序时,可以让提供程序将更新通知contentresovler。我有一个插入新照片的方法,该方法使用数据提供程序。数据提供程序需要
getContext().getContentResolver().notifyChange(uri, null);才能真正更新光标。
发布于 2012-07-24 17:42:10
同样,问题很可能是,您正在从父Fragment中管理您的Activity加载器。Activity和Fragment生命周期不相互同步(至少不能以可预测的方式进行),因此调试该问题的尝试实际上并没有给您带来任何进展。保证可预测行为的最简单方法是让每个单独的组件使用自己的LoaderManager (而不是使用Fragment的access getActivity().getSupportLoaderManager())。
https://stackoverflow.com/questions/11182612
复制相似问题