如何在notifyChange之后更改Loader <Cursor>中的查询

zee*_*han 3 android cursor loader

我已经尝试了几个小时,但无法做到这一点.我尝试通过Bundle,通过静态变量,通过if语句发送,但没有任何工作.

我有一种情况,我希望我的Loader在用户点击菜单项后加载不同的数据集.这意味着一旦收到notifyChange,就应该更改查询.代码是非常标准的Loader代码,如下所示:

@Override
public Loader<Cursor> onCreateLoader(int id, Bundle args) {
    String query = args.getString("query");

    String[] projection = { DbCreate.ID, DbCreate.COL_ITEM, DbCreate.COL_STATUS, DbCreate.COL_SYNCED,
            DbCreate.COL_PRIORITY, DbCreate.COL_COMPLETEBY, DbCreate.COL_TAG, DbCreate.COL_ASSIGNED, DbCreate.COL_SHARED};

    CursorLoader cursorLoader = new CursorLoader(getActivity(),
            DbProvider.CONTENT_URI_DATA, projection, query, null, "priority DESC, status ASC, _id DESC");

    return cursorLoader;
}
Run Code Online (Sandbox Code Playgroud)

我在这个onCreate方法中尝试了通常的if(...)语句,但它不起作用.这意味着notifyChange只触发已创建的对象.那么如何在notifyChange上注入一个新的'query'值呢?

Akh*_*Dad 9

我在我的代码中做同样的事情你需要重新启动游标加载器当你想要改变数据通知工作适配器而不是游标加载器

@Override
    public Loader<Cursor> onCreateLoader(int id, Bundle arg1) {
        // This is called when a new Loader needs to be created. 
        // Now create and return a CursorLoader that will take care of
        // creating a Cursor for the data being displayed.
        Uri contentUri = MyContentProvider.CONTENT_URI_FACEBOOK;
        switch (id) {
        case FACEBOOK:
            contentUri = MyContentProvider.CONTENT_URI_FACEBOOK;
            break;
        case LINKEDIN:
            contentUri = MyContentProvider.CONTENT_URI_LINKEDIN;
            break;
        }

        return new CursorLoader(getActivity(), contentUri, null, null, null,
                null);

    }
Run Code Online (Sandbox Code Playgroud)

对于各种查询我只是这样做

getLoaderManager().restartLoader(FACEBOOK, null, Profile.this);
getLoaderManager().restartLoader(LINKEDIN, null, Profile.this);
Run Code Online (Sandbox Code Playgroud)

所以你只需要重新启动加载器