I have created a small application, trying to understand the functionality of the LoaderManager
and CursorLoader
-classes.
I have implemented LoaderCallbacks<Cursor>
on my FragmentActivity
-class and everything works fine, except the fact that when I update my data via ContentResolver.update()
or ContentResolver.insert()
-methods, onLoadFinished()
is not called and as a result my data doesn't update.
I have a custom ContentProvider and I am wondering if the problem is in my ContentProvider not notifying that the data changed or something else.
Did you call
setNotificationUri(ContentResolver cr, Uri uri)
on theCursor
before returning it inContentProvider.query()
?And did you call
getContext().getContentResolver().notifyChange(uri, null)
in the 'insert' method of yourContentProvider
?EDIT:
To get a
ContentResolver
callgetContext().getContentResolver()
in yourContentProvider
.Accepted answer was the little bit tricky to understand so I am writing the answer to make it easy for other developers..
ContentProvider
Find the query() method which has the following syntax
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder)
Write this line where you are returning the cursor
cursor.setNotificationUri(getContext().getContentResolver(), uri); return cursor;
In the end, my query method looks like this
Also check if you call somewhere cursor.close(), because in this case you unregister the content observer which was registered by CursorLoader. And the cursor closing is managed by CursorLoader.