ContentObserver收到有关删除但不是插入或更新的通知

时间:2011-04-20 06:42:51

标签: android contentobserver

我的活动中有以下代码:

Cursor mCursor = managedQuery(ActivityColumns.CONTENT_URI, PROJECTION, null, null,
                getSortOrderStringFromSpinner());

        mCursor.registerContentObserver(new ContentObserver(new Handler())
        {
            @Override
            public void onChange(boolean selfChange)
            {
                ...snip...// breakpoint is set here                 
            }

            @Override
            public boolean deliverSelfNotifications()
            {
                return true;
            }
        });

...在我用来获取数据的DataProvider中,我将查询方法中的通知URI设置为我要查询的类型的uri:

c.setNotificationUri(getContext().getContentResolver(), uri);

最后,在更新,插入和删除中,如果操作成功,则通知订户:

getContext().getContentResolver().notifyChange(notificationUri, null);

上面一行中的notificationUri是要插入/更新或删除的项目的URI。

在“... snip ...”代码行上设置了断点,我添加,删除并更新了一些记录。我只收到有关删除的通知,但不会通知更新或插入。我做错了什么?

3 个答案:

答案 0 :(得分:1)

问题就像我怀疑的那样:内容观察者没有收到有关插入或更新的更新,因为当时暂停了应该刷新的列表的活动。要在我的应用程序中插入或更新记录,用户会启动一个不同的活动,在那里他们编辑记录,然后单击“提交”。

然后在

中执行保存
protected void onActivityResult (int requestCode, int resultCode, Intent data) 

我不知道的是,当我阅读文档时发现onActivityResult是:

  

当您启动的活动退出时调用,为您提供requestCode,启动它,返回resultCode,以及来自它的任何其他数据。如果活动显式返回,则不会返回任何结果,或者在操作期间崩溃,resultCode将为RESULT_CANCELED。

     

当您的活动重新开始时,您将在onResume()之前立即收到此来电。

所以底线是我执行插入和更新时活动未处于活动状态,因此没有收到有关插入或更新的通知。

删除不同,因为当从上下文菜单中选择“删除”时,我的应用程序会从列表中删除项目。活动始终保持活跃。

答案 1 :(得分:0)

这仍然需要更多的测试,但似乎问题是,当光标更新发生时,内容观察者的活动未被通知暂停。暂停活动不会收到活动......我想......

答案 2 :(得分:0)

电话

getContext().getContentResolver().notifyChange(notificationUri, null);

应包含对已通知内容观察员的引用,即

getContext().getContentResolver().notifyChange(notificationUri, MyContentObserver);
相关问题