ContentObserver
和 DatasetObserver
有什么区别?
什么时候应该使用一个或另一个?
我得到单行的 Cursor
。我想收到有关数据更改的通知 - 例如。当行更新时。
我应该注册哪个观察者类?
最佳答案
如果您使用 ContentProvider
(通过 ContentResolver
或 Activity.managedQuery()
)获取数据,只需附加 ContentObserver
到您的 Cursor
。每当 ContentResolver
广播与您的光标关联的 Uri
的通知时,都会调用 onChange()
中的代码。
Cursor myCursor = managedQuery(myUri, projection, where, whereArgs, sortBy);
myCursor.registerContentObserver(new ContentObserver() {
@Override
public void onChange(boolean selfChange) {
// This cursor's Uri has been notified of a change
// Call cursor.requery() or run managedQuery() again
}
@Override
public boolean deliverSelfNotifications() {
return true;
}
}
确保您的 ContentProvider
是“好公民”,并在查询后使用光标注册 Uri
:
cursor.setNotificationUri(getContentResolver(), uri);
它还应该通知 ContentResolver
对底层数据的任何更改(例如,在 SQLite 数据库上的插入、删除和更新操作期间):
getContentResolver().notifyChange(uri, null);
这种方法是面向对象设计的观察者模式的一个很好的例子。
关于android - ContentObserver 和 DatasetObserver 的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5430862/