首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >数据更改后不更新MergeCursor

数据更改后不更新MergeCursor
EN

Stack Overflow用户
提问于 2014-09-23 02:16:05
回答 1查看 243关注 0票数 0

我正在创建一个类似于这样的MergeCursor:

代码语言:javascript
运行
复制
    @Override
    public Cursor loadInBackground() {
        Log.d(LOG, "loading data in background");

        ContentResolver cr = getContext().getContentResolver();
        Cursor people = getContext().getContentResolver().query(PeopleProvider.CONTENT_URI, null, null, null, null);
        people.setNotificationUri(cr, PeopleProvider.CONTENT_URI);
        Cursor jobs = getContext().getContentResolver().query(JobProvider.CONTENT_URI, null, null, null, null);
        jobs.setNotificationUri(cr, JobsProvider.CONTENT_URI);
        Cursor horses = getContext().getContentResolver().query(HorseProvider.CONTENT_URI, null, null, null, null);
        horses.setNotificationUri(cr, HorseProvider.CONTENT_URI);

        Cursor[] c = new Cursor[3];

        c[0] = people;
        c[1] = jobs;
        c[2] = horses;

        MergeCursor mc = new MergeCursor(c);

        return mc;
    }

然后,当我向相应的db表添加新行时:

代码语言:javascript
运行
复制
    "PeopleProvider.java"

    @Override
    public Uri insert(Uri uri, ContentValues values) {
        Log.d(LOG, "Insert into People");
        long id = database.insertOrThrow(DatabaseConstants.TABLE_PEOPLE, null, values);
        getContext().getContentResolver().notifyChange(uri, null);
        return ContentUris.withAppendedId(uri, id);
    }

我也试过:

代码语言:javascript
运行
复制
    "WhereDataIsPresentedFragment.java"
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Log.d(LOG, "onActivityResult()");
        switch(requestCode) {
        case NEW_PEOPLE_ACTIVITY:
            Log.d(LOG, "Returned with newly added person");
            if (resultCode==Activity.RESULT_OK) {
                mListViewAdapter.notifyDataSetChanged();
                getActivity().getContentResolver().notifyChange(PeopleProvider.CONTENT_URI, null);
            }
            break;
        }
    }

所有方法都被调用(通过Log.d确认),所以我不知道为什么在触发通知时没有更新游标。任何对这项工作的洞察力都将不胜感激。过去,我对常规游标没有任何问题,但在MergeCursor业务方面却没有任何进展。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-09-23 17:02:17

因此,我的工作方式(不管它是否正确)是通过对我的AsyncTaskLoader类进行进一步的子类划分:

代码语言:javascript
运行
复制
    @Override
    protected void onStartLoading() {

        forceLoad();
    }

从本质上说,通过将forceLoad();添加到onStartLoading()方法中,现在一切都如期而至。我能够删除对notifyDataSetChanged()的所有附加调用和对URI的通知。那条单线把一切都修好了。如果有人有一个更好的解决方案,请告诉我,但就目前而言,这是我得到的。

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

https://stackoverflow.com/questions/25985852

复制
相关文章

相似问题

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