android - ContentObserver 和 DatasetObserver 的区别?

标签 android android-contentprovider android-cursor contentobserver

ContentObserverDatasetObserver 有什么区别?

什么时候应该使用一个或另一个?

我得到单行的 Cursor。我想收到有关数据更改的通知 - 例如。当行更新时。

我应该注册哪个观察者类?

最佳答案

如果您使用 ContentProvider(通过 ContentResolverActivity.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/

相关文章:

android - 在 Android 上获取所有联系人姓名和号码作为字符串列表

安卓:GUID 主键

android - 在android中使用CursorLoader代替startManagingCursor,数据库访问

android - 如何在Android中删除SIM卡中的联系人

android - 三星 Galaxy s3 模拟器设置

android - 我应该使用 Cursor 还是 CursorLoader?

android - hive 上使用Android兼容库的缺点

android - 获取其中包含歌曲的流派名称列表

java - Android,从sqlite检索数据并显示在自定义列表中的正确方法

android - 实现类似动画的 Google-Play-Music(播放列表项旁边的 3 条频谱)