假设我有CursorLoader监听用CONTENT_URI_1寻址的table1中的更改。 table1中的数据取决于使用CONTENT_URI_2寻址的table2的内容(对于那些对详细信息感兴趣的人,table1是对table2的sql视图)。
通过我的内容提供商中的setNotificationUri(),任何加载器都会收到有关表内容更改的通知。
现在,我从其他地方插入一行到table2,它发送CONTENT_URI_2更改的通知。但是没有通知CONTENT_URI_1,因为每个游标只能有一个通知uri。
问题是当CONTENT_URI_2发生变化时如何通知CONTENT_URI_1?
答案 0 :(得分:0)
您可以在您的活动/片段中实施ContentObserver
:
在onResume()
注册,并在onPause
注销。
getContentResolver().registerContentObserver(CONTENT_URI2, true, yourObserver);
关注此link。在onChange()
致电ContentObserver
时调用adapter.notifyDataSetChanged()
回调,以刷新ListView
希望有所帮助
答案 1 :(得分:0)
我在发布问题后不久找到答案:)
如果您想在例如将数据插入CONTENT_URI_2(table2)之后通知CONTENT_URI_1(table1),您应该执行以下操作:
Uri resultUri = context.getContentResolver().insert(CONTENT_URI_2, table2rowDataContentValues);
// simply notify whatever URI you desire of changes
context.getContentResolver().notifyChange(CONTENT_URI_1, null);
非常简单,但最初并没有找到我。
答案 2 :(得分:0)
这是一个古老的问题,但仍然足以通过新的答案进行更新。
如果你有一个uri指向一个表,并且一个uri指向表的视图,那么我们可以通过使用正确的uirs命名来自动通知视图。
让我们将uri命名为表格,将querstion中的CONTENT_URI_2命名为
content://authority/table1
然后,如果我们将观看uri命名为
content://autority/table1/view1
然后,使用content://authority/table1
对表格进行的任何更改都会自动通知content://authority/table1/view1