Если вы используете ContentProvider
(через ContentResolver
или Activity.managedQuery()
) для получения ваших данных, просто присоедините ContentObserver
к вашему Cursor
.Код в onChange()
будет вызываться всякий раз, когда ContentResolver
передает уведомление для Uri
, связанного с вашим курсором.
Cursor myCursor = managedQuery(myUri, projection, where, whereArgs, sortBy);
myCursor.registerContentObserver(new ContentObserver() {
@Override
public void onChange(boolean selfChange) {
// This cursor's Uri has been notified of a change
// Call cursor.requery() or run managedQuery() again
}
@Override
public boolean deliverSelfNotifications() {
return true;
}
}
Убедитесь, что ваш ContentProvider
является "хорошим гражданином" и регистрируетсяUri
с курсором после запроса:
cursor.setNotificationUri(getContentResolver(), uri);
Он также должен уведомлять ContentResolver
о любых изменениях базовых данных (например, во время операций вставки, удаления и обновления на вашем SQLite).база данных):
getContentResolver().notifyChange(uri, null);
Этот подход является хорошим примером модели наблюдателя объектно-ориентированного проектирования.