我已经实施update()
并ContentProvider
通知观察者使用getContext().getContentResolver().notifyChange(uri, null);
我明显的需要是,每当只影响一行时,我想用行特定的 uri 通知,但找不到这样做的方法。像这样的附加查询"select id where selectionArgs"
可以做到这一点,但这将是一种愚蠢的方式。
onchange(boolean, uri)
获取完整的uri而不是特定的行,很容易理解这是因为ContentProvider.update()
发送相同。
some code for more clarity
MyContentProvider 的 update() 方法
@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
Log.d("TAG", "update " + uri.getPath());
int count = 0;
switch (uriMatcher.match(uri)) {
case BOOKS:
count = booksDB.update(DATABASE_TABLE, values, selection, selectionArgs);
break;
case BOOK_ID:
count = booksDB.update(DATABASE_TABLE, values,
_ID + " = " + uri.getPathSegments().get(1)
+ (!TextUtils.isEmpty(selection) ? " AND (" + selection + ')' : ""),
selectionArgs);
break;
default:
throw new IllegalArgumentException("Unknown URI " + uri);
}
if (count == 1) {
Cursor c = query(uri, new String[] { _ID }, selection, selectionArgs, null);
long rowId = Long.valueOf(c.getString(c.getColumnIndex(_ID)));
uri = ContentUris.withAppendedId(CONTENT_URI, rowId);
}
getContext().getContentResolver().notifyChange(uri, null);
return count;
}
我会更新一些表格
getContentResolver().update(MyContentProvider.CONTENT_URI, values1, MyContentProvider._ID+"<?", new String[]{"3"}));
坦率地说,代码与问题几乎没有关系,只是想给你一些上下文