我有一个包含项目列表的片段,每个项目都有一个可编辑的数量。当我编辑数量时,数据库会更新,我在片段中收到一个新光标。这一切都很有效,除非您多次更新数量,否则不再调用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不再被调用。
如果需要额外的代码,请告诉我们!
提前致谢。
答案 0 :(得分:0)
尝试使用CursorLoader,如下所示:
return new CursorLoader(this.getActivity(), CartContentProvider.CONTENT_URI_PRODUCTS, projection, null, null, null);
使用片段的Activity上下文,还要检查在活动或片段中实现LoaderCallbacks接口的位置?