我使用了几个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().