0

我正在使用带有 ImageDownloader 的非常简单的 CursorLoader。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的行只是检索光标的方法,如下所示:

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方法。

我遇到的麻烦是一切似乎都运行良好,我的日志输出正在正确输出图像的 url,断点都显示合法数据,但问题是我的网格视图永远不会用图像更新ImageDownloader 检索。

编辑 这是SimpleCursorLoader我正在使用的:https ://gist.github.com/1217628

4

2 回答 2

0

再一次,问题很可能是您正在Fragment从 parent 管理您的加载程序Activity。和生命周期彼此不同步(至少不是以可预测的方式),因此您调试问题的尝试实际上并没有让您有任何收获ActivityFragment保证可预测行为的最简单方法是让每个单独的组件都使用自己的组件LoaderManager(而不是让您Fragment的 s 访问getActivity().getSupportLoaderManager())。

于 2012-07-24T17:42:10.160 回答
0

与我的另一个问题一样.. 不应该强制刷新,并且在使用提供程序时,您可以让提供程序通知 contentresovler 更新。我有一个插入新照片的方法,该方法使用数据提供程序。数据提供者需要

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

实际更新光标。

于 2012-09-26T16:31:52.757 回答