2011-04-20 55 views
0

我已经在我的活动下面的代码: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); 

最后,更新,插入和删除,如果操作成功,用户被通知:

上述

的notificationUri在该行是被插入/更新或删除的项目的URI。

随着代码的“...略...”行设置一个断点,我添加,删除和更新一些记录。我只会收到有关删除的通知,但不会更新或插入。我究竟做错了什么?

回答

1

的问题是,就像我怀疑:内容观察者没有接收关于插入或更新的更新,因为列表中的活动,本来是要当时被刷新被暂停。要在我的应用程序中插入或更新记录,用户将启动一个不同的活动,在其中编辑记录,然后单击“提交”。

的保存,然后在

protected void onActivityResult (int requestCode, int resultCode, Intent data) 

执行我不知道什么,我发现,当我阅读文档是onActivityResult是:

当一个活动,你推出了名为退出,为您提供您开始使用的requestCode,返回的resultCode以及任何其他数据。如果活动显式返回该结果,未返回任何结果或在操作期间崩溃,resultCode将为RESULT_CANCELED。

您会立即收到此调用之前的onResume()当你的活动重新开始。

所以底线是,活动并不活跃,当我进行插入和更新,因此没有得到通知有关插入或更新。

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

0

这还需要一些更多的测试,但似乎问题出现了,当光标更新发生的与没有得到通知的内容观测活动暂停。而暂停活动不接收事件......我想......

+2

你解决这个问题? – Merlin 2011-07-25 03:30:48

0

呼叫

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

应包含内容的观察者的引用被通知即

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