tôi đã thực hiện update()
của ContentProvider
và thông báo cho người quan sát sử dụng getContext().getContentResolver().notifyChange(uri, null);
notifyChange với uri thay đổi từ contentProvider.update()
nhu cầu rõ ràng của tôi là bất cứ khi nào chỉ là một hàng được thực hiện tôi muốn thông báo với uri cụ thể liên tiếp, nhưng không thể tìm cách để làm như vậy. truy vấn bổ sung như "select id where selectionArgs"
có thể thực hiện điều này nhưng đây sẽ là một cách ngu xuẩn.
onchange(boolean, uri)
lấy uri hoàn chỉnh thay vì hàng cụ thể, dễ hiểu vì điều này là do ContentProvider.update()
đang gửi giống nhau. phương pháp
some code for more clarity
cập nhật() của MyContentProvider
@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;
}
tôi sẽ cập nhật bảng một số cách như
getContentResolver().update(MyContentProvider.CONTENT_URI, values1, MyContentProvider._ID+"<?", new String[]{"3"}));
thẳng thắn nói, mã đã hầu như không liên quan đến câu hỏi, chỉ cần cố gắng để cung cấp cho bạn một số ngữ cảnh
Một số mã có thể có ích. Làm thế nào để bạn cập nhật nhiều hàng? – sandrstar
Hãy chắc chắn rằng bạn gọi 'setNotificationUri (ContentResolver cr, Uri uri)' trên con trỏ được trả về bởi phương thức 'query()' của nhà cung cấp nội dung yout. Thông tin thêm tại http://stackoverflow.com/questions/7915050/cursorloader-not-updating-after-data-change. –