当前位置 : 主页 > 手机开发 > android >

Android Cursor.registerContentObserver()

来源:互联网 收集:自由互联 发布时间:2021-06-11
我使用了几个listviews,每个使用子类SimpleCursorAdapter来处理db的结果.这是一个简单的日记查看器,活动1 =日,活动2 =周. 我正在尝试删除日期列表视图中的项目,然后在更改后刷新日视图和周视
我使用了几个listviews,每个使用子类SimpleCursorAdapter来处理db的结果.这是一个简单的日记查看器,活动1 =日,活动2 =周.

我正在尝试删除日期列表视图中的项目,然后在更改后刷新日视图和周视图.

如果我在已删除的活动中调用cursor.requery(),则会反映更改.但是,其他活动并不知道变化.

我想我想使用Cursor.registerContentObserver作为文档声明“注册在支持此游标的内容发生更改时调用的观察者.通常,在调用requery()之前,数据集不会更改.”

但是,我天真地写了一个内容观察者:

private class dbObserver extends ContentObserver {

    public dbObserver(Handler handler) {
        super(handler);
    }

    @Override
    public void onChange(boolean selfChange) {
        lectureCursor.requery();
        super.onChange(selfChange);
    }

}

然后在每个活动的onCreate中:

dbObserver test = new dbObserver(new Handler());
    lectureCursor.registerContentObserver(test);

但是当我从数据库中删除时,onChange永远不会被调用.我在这里做些蠢事吗?

我认为它不起作用的原因是因为你试图从onChange()中调用requery()但是只有在调用requery()之后才调用onChange().

您可能需要考虑使用ContentResolver的registerContentObserver().这样,只要该uri的数据库发生更改,就会调用onChange().

网友评论