首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >安卓将ImageDownload与CursorLoader相结合

安卓将ImageDownload与CursorLoader相结合
EN

Stack Overflow用户
提问于 2012-06-25 01:39:14
回答 2查看 541关注 0票数 0

我使用的是一个非常简单的CursorLoader和一个ImageDownloader。ImageDownloader正在运行,除了CursorLoader之外,一切都完成了,然后ImageDownloader开始了下载图像的工作,但是GridView没有使用下载的图像进行更新。

在我的onActivityCreated中,我有以下ListFragment方法:

代码语言:javascript
复制
@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如下:

代码语言:javascript
复制
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的检索所有照片的行只是检索光标的方法,如下所示:

代码语言:javascript
复制
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检索的图像更新。

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-09-26 16:31:52

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

代码语言:javascript
复制
getContext().getContentResolver().notifyChange(uri, null);

才能真正更新光标。

票数 0
EN

Stack Overflow用户

发布于 2012-07-24 17:42:10

同样,问题很可能是,您正在从父Fragment中管理您的Activity加载器。ActivityFragment生命周期不相互同步(至少不能以可预测的方式进行),因此调试该问题的尝试实际上并没有给您带来任何进展。保证可预测行为的最简单方法是让每个单独的组件使用自己的LoaderManager (而不是使用Fragment的access getActivity().getSupportLoaderManager())。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11182612

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档