3
나는 ContentProvider
입니다. 내 콘텐츠 제공 업체에서 내 update
방법은 다음과 같습니다 ContentObserver onChange()를 호출하지 않습니다.
@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;
}
그때 나는
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();
}
}
그리고 나는 내에서 onCreate처럼 그것을 regsitering 오전 : 항목 중 하나를 클릭에, 같은 업데이트 해요,
getActivity().getContentResolver().registerContentObserver(MyContentProvider.CONTENT_URI, true, myObserver);
그리고 내 onOptionItemSelected
에 :
getActivity().getContentResolver().update(ContactsContentProvider.CONTENT_URI, values, where, null);
바로 여기 있습니다. 내 코드에서는 정확히 동일합니다. – Aleena