gpt4 book ai didi

android - CursorLoader 在 notifyChange 调用后不更新

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:48:53 26 4
gpt4 key购买 nike

我已经注册了一个 CursorLoader,但它没有从我的 ContentProvider 接收更新

事件的顺序是:

  1. Fragment 中,将 CursorLoader 注册到:

    getLoaderManager().initLoader(LOADER_FAVS_ID, null, this);

    注意我使用的是支持库版本,所以这个方法是android.support.v4.app.Fragment.getLoaderManager()

  2. 注册了CursorLoader,在onLoadFinished加载了一个Cursor:

    @Override
    public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
    Log.i(TAG, "onLoadFinished");
    switch (loader.getId()) {
    case LOADER_FAVS_ID:
    Log.i(TAG,
    "cursor notification uri: " + cursor.getNotificationUri());
    mCursorAdapter.swapCursor(cursor);
    break;
    }
    }

    例如,记录 光标通知 uri:content://com.myapp.mylocation/db_locations。这是因为我确保在从我的 ContentProvider 返回 Cursor 之前调用 cursor.setNotificationUri(getContext().getContentResolver(), uri);。另请注意,我的内容提供程序返回一个 MergeCursor

  3. 一段时间后,在我的 ContentProvider 中调用了 update(),并执行了以下行:

    Log.i(TAG,
    "Notifying uri: " + uri.toString());
    getContext().getContentResolver().notifyChange(
    uri, null);

    记录 通知 loc uri:content://com.myapp.mylocation/db_locations,与上面的 uri 相同。

但是 onLoadFinished 永远不会被调用,我的 Cursor 也永远不会更新。我相信我已经听从了我能找到的建议,所有这些基本上都是this .为什么 onLoadFinished 不会在所有这一切之后被调用?

最佳答案

解决了它,但由于我还没有看到这个记录,这是我的解决方案。

我从我的 ContentProvider 返回一个 MergeCursor,基本上只是连接游标列表。我有

    @Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
// Generate an array of Cursors

MergeCursor mergCursor = new MergeCursor(cursorArray);

// notify potential listeners
mergCursor.setNotificationUri(getContext().getContentResolver(), uri);

return mergCursor;
}

而我的 CursorLoader 从未收到通知。但是,由于 MergeCursor 基本上只是一个 Cursor 数组,您需要在 MergeCursor< 中的 each 光标上设置通知 uri/.

    @Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
// Generate an array of Cursors

// set the notification uris...
for (Cursor cursor : cursorArray) {
cursor.setNotificationUri(getContext().getContentResolver(), uri);
}

MergeCursor mergCursor = new MergeCursor(cursorArray);

return mergCursor;
}

现在一切正常!

关于android - CursorLoader 在 notifyChange 调用后不更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21273898/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com