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

8cdiaqws  于 2023-10-14  发布在  Android
关注(0)|答案(2)|浏览(126)

我试了好几个小时,但还是做不到。我尝试通过Bundle、静态变量、if语句发送,但都不起作用。
我有一个情况,我希望我的加载程序加载不同的数据集,一旦用户点击了菜单项。这意味着查询在收到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;
}

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

laik7k3q

laik7k3q1#

我做同样的事情在我的代码中你需要重新启动游标加载器再次当你想改变数据通知工程适配器上没有游标加载器

@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);

    }

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

getLoaderManager().restartLoader(FACEBOOK, null, Profile.this);
getLoaderManager().restartLoader(LINKEDIN, null, Profile.this);

所以你只需要重启loader

g6ll5ycj

g6ll5ycj2#

如果我正确理解了您的问题,您可能不想担心尝试通过notifyChange更改数据集。我认为你很可能想简单地启动一个新的加载器(或者在现有的加载器上强制重新加载)。让加载器在加载完成时设置适配器,这将导致对数据集的通知。
即用户点击菜单,你用新的查询参数/其他信息触发加载器。如果加载器已经在运行,你可以取消它,然后启动一个新的加载器。

相关问题