Третий вариант - просто переопределить loadInBackground
:
public class CustomCursorLoader extends CursorLoader {
private final ForceLoadContentObserver mObserver = new ForceLoadContentObserver();
@Override
public Cursor loadInBackground() {
Cursor cursor = ... // get your cursor from wherever you like
if (cursor != null) {
// Ensure the cursor window is filled
cursor.getCount();
cursor.registerContentObserver(mObserver);
}
return cursor;
}
};
Это также позаботится о повторном запросе курсора при изменении базы данных.
Только предостережение: вам придется определить другого наблюдателя, так как Google в своей бесконечной мудрости решил сделать их пакет приватным. Если вы поместите класс в тот же пакет, что и исходный (или совместимый), вы на самом деле можете использовать исходный наблюдатель. Наблюдатель является очень легким объектом и больше нигде не используется, так что это не имеет большого значения.