どこか間違っていたら訂正してください。
ContentProvider
query(…)
メソッドで次のようなものを呼び出します。
// Tell the cursor what uri to watch, so it knows when its source data changes
cursor.setNotificationUri(getContext().getContentResolver(), uri);
CursorLoader
カーソルを戻し、オブザーバーを登録します。
/* Runs on a worker thread */
@Override
public Cursor loadInBackground() {
Cursor cursor = getContext().getContentResolver().query(mUri, mProjection,
mSelection, mSelectionArgs, mSortOrder);
if (cursor != null) {
// Ensure the cursor window is filled
cursor.getCount();
registerContentObserver(cursor, mObserver);
}
return cursor;
}
/**
* Registers an observer to get notifications from the content provider
* when the cursor needs to be refreshed.
*/
void registerContentObserver(Cursor cursor, ContentObserver observer) {
cursor.registerContentObserver(mObserver);
}
誰かがデータを変更すると、変更についてContentProvider
通知ContentResolver
します。
getContext().getContentResolver().notifyChange(uri, null);
ContentResolver
次に、登録されているすべてのオブザーバーに通知します。
によって登録されたオブザーバーは、CursorLoader
新しいデータをロードするように強制します。