Ich habe Forschung auf, wie aus this tutorialWofür wird cursor.setNotificationUri() verwendet?
ContentProviders
und Lader zu verwenden, wie ich es sehe: Wir haben ein Activity
mit ListView
, SimpleCursorAdapter
und CursorLoader
. Wir implementieren auch ContentProvider
.
In einem Activity
können wir getContentResolver().insert(URI, contentValues);
per Knopfdruck aufrufen.
In unserer Implementierung von ContentProvider
, am Ende der insert()
Methode nennen wir getContentResolver().notifyChange(URI, null);
und unsere CursorLoader
wird Meldung, die es Daten und Update UI neu laden sollte. Auch wenn wir FLAG_REGISTER_CONTENT_OBSERVER
in SimpleCursorAdapter
verwenden, wird es auch Nachricht erhalten und seine Methode onContentChanged()
wird aufgerufen.
So wird unser ListView aktualisiert, wenn wir Daten einfügen, aktualisieren oder löschen.
Activity.startManagingCursor(cursor);
ist veraltet, cursor.requery()
veraltet, so sehe ich keine Praxis Sinn von cursor.setNotificationUri()
.
Ich schaute in setNotificationUri()
Methode Quellcode und sah, dass es mContentResolver.registerContentObserver(mNotifyUri, true, mSelfObserver)
innerhalb der Methode ruft. Auch CursorLoader
macht das gleiche. Schließlich erhält der Cursor eine Nachricht und die folgende Methode wird im Cursor aufgerufen:
protected void onChange(boolean selfChange) {
synchronized (mSelfObserverLock) {
mContentObservable.dispatchChange(selfChange, null);
// ...
}
}
Aber ich kann keinen Sinn daraus machen.
Also meine Frage ist: warum sollten wir cursor.setNotificationUri()
in query()
Methode unserer ContentProvider
Implementierung nennen?
Vielen Dank für solch eine wunderbare Erklärung. –
Auch wenn ich zu spät zur Party bin, meine Fragen sind, ist dies sogar für eine andere Anwendung möglich, die diese URI verwendet, um unseren ContentProvider abzufragen? – Pankaj