OnLoadFinished在更新后突然没有再调用

时间:2016-06-08 09:18:29

标签: android

我有一个包含项目列表的片段,每个项目都有一个可编辑的数量。当我编辑数量时,数据库会更新,我在片段中收到一个新光标。这一切都很有效,除非您多次更新数量,否则不再调用onLoadFinished方法。这可能发生在5次更新后或200次更新后:我无法重现命令中的错误。更新在数据库中执行,因为当我关闭并打开该屏幕时,我可以看到更新的数量。代码中没有任何异常发生:未调用onLoaderReset,在contentprovider中的正确Uri上调用notifyChange。有没有人见过这个问题?

当数量需要更新时:

        ContentValues cv = new ContentValues();
        cv.put(CartTable.COLUMN_COUNT, quantity);
        String selection = CartTable.COLUMN_ID + " = " + cartItemId;
        contentResolver.update(CartContentProvider.CONTENT_URI, cv, selection, null);

CartContentProvider:

@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)
{
    int rowsUpdated;

    switch (uriMatcher.match(uri))
    {
        case CART_ITEMS:
            rowsUpdated = this.database.update(CartTable.TABLE_NAME, values, selection, selectionArgs);
            break;

        default:
            throw new IllegalArgumentException("Unknown URI: " + uri);
    }

    if(rowsUpdated > 0)
    {
        this.getContext().getContentResolver().notifyChange(CONTENT_URI, null);
        this.getContext().getContentResolver().notifyChange(CONTENT_URI_PRODUCTS, null);
        this.getContext().getContentResolver().notifyChange(CONTENT_URI_PRODUCTS_PHOTOS, null);
        this.getContext().getContentResolver().notifyChange(CONTENT_URI_PHOTOS, null);
    }
    return rowsUpdated;
}

当我创建CursorLoader时:

return new CursorLoader(this.getView().getContext(), CartContentProvider.CONTENT_URI_PRODUCTS, projection, null, null, null);

因此,例如,我编辑数量20次,使用新光标调用onLoadFinished 20次。第21次以及之后的所有时间,更新都会发生,但onLoadFinished不再被调用。

如果需要额外的代码,请告诉我们!

提前致谢。

1 个答案:

答案 0 :(得分:0)

尝试使用CursorLoader,如下所示:

return new CursorLoader(this.getActivity(), CartContentProvider.CONTENT_URI_PRODUCTS, projection, null, null, null);

使用片段的Activity上下文,还要检查在活动或片段中实现LoaderCallbacks接口的位置?