Android 如何实现ContentObserver?

Android 如何实现ContentObserver?,android,android-contentprovider,contentobserver,Android,Android Contentprovider,Contentobserver,我有一个ContentProvider,我使用它填充我的列表视图。我需要单击菜单项之一。它会更新我的数据集,但我需要反映列表视图中的更改。我读过ContentObserver,但我仍然不知道如何实际实现它。这是我的密码 MYContentObserver @SuppressLint("NewApi") public class MyObserver extends ContentObserver { public MyObserver(Handler ha

我有一个
ContentProvider
,我使用它填充我的
列表视图
。我需要单击
菜单项之一
。它会更新我的数据集,但我需要反映
列表视图中的更改。我读过ContentObserver,但我仍然不知道如何实际实现它。这是我的密码

MYContentObserver

@SuppressLint("NewApi")
    public class MyObserver extends ContentObserver {        
        public MyObserver(Handler handler) {
            super(handler);            
        }
        @Override
        public void onChange(boolean selfChange) {
            List<Contact> newData;
            if(CONTACT_TYPE == VOIP_CONTACTS){
                newData = ContactsManager.getVoipContacts(getActivity());
            }else{
                newData = ContactsManager.getAllContacts(getActivity());
            }
            customAdapter.contacts().clear();
            customAdapter.contacts().addAll(newData);
            customAdapter.notifyDataSetChanged();
        }
    }
现在怎么办???是吗?或者我需要调用一些方法等

**Edite**
我的内容提供商中的更新方法是:

       @Override
   public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) {
      int count = 0;
      switch (uriMatcher.match(uri)){
      case CONTACT:
         count = db.update(CONTACTS_TABLE_NAME, values, 
                 selection, selectionArgs);
         break;
      case CONTACT_ID:
         count = db.update(CONTACTS_TABLE_NAME, values, _ID + 
                 " = " + uri.getPathSegments().get(1) + 
                 (!TextUtils.isEmpty(selection) ? " AND (" +
                 selection + ')' : ""), selectionArgs);
         break;
      default: 
         throw new IllegalArgumentException("Unknown URI " + uri );
      }
      getContext().getContentResolver().notifyChange(uri, null);
      return count;
   }
在my
onOptionItemSelected
中,单击其中一个项目,我会像这样更新:

getActivity().getContentResolver().update(ContactsContentProvider.CONTENT_URI, values, where, null);

在我看来这没什么,每次您的URI
CONTENT\u URI
更新(插入、删除或修改)时,都应该触发
ContentObserver
,如果没有调用
onChange()
方法,请确保您在
ContentProvider
中指向正确的URI

您应该添加的一件事是取消内容观察者的注册,在
onPause()
方法中,您应该执行以下操作:

getContentResolver().unregisterContentObserver(myObserver);

希望有帮助

是的,这就足够了,现在需要调用它将注册该观察者的任何方法。但是我的应用程序没有进入onChange/MyObserver,但是我的应用程序没有进入onChange/MyObserver。那么你如何更新你的内容uri?是否调用了你的
onUpdate()
方法?当然……如果我刷新活动,列表已更新。如果正在使用加载程序,请尝试在活动中调用
restartLoader
,如果不使用,请尝试调用
myListView.invalidateViews()
getContentResolver().unregisterContentObserver(myObserver);