我做了關於如何使用ContentProviders
和裝載機從this tutorialcursor.setNotificationUri()用於什麼?
我怎麼看它的研究: 我們有一個Activity
與ListView
,SimpleCursorAdapter
和CursorLoader
。我們也執行ContentProvider
。
在Activity
中,我們可以通過點擊按鈕來調用getContentResolver().insert(URI, contentValues);
。
在我們實施ContentProvider
,在insert()
方法的末尾,我們稱之爲getContentResolver().notifyChange(URI, null);
和我們CursorLoader
將收到的消息,它應該重新加載數據和更新UI。另外,如果我們在SimpleCursorAdapter
中使用FLAG_REGISTER_CONTENT_OBSERVER
,它也會收到消息並調用其方法onContentChanged()
。
因此,如果我們插入,更新或刪除數據,我們的ListView將被更新。
Activity.startManagingCursor(cursor);
已棄用,cursor.requery()
已棄用,所以我從cursor.setNotificationUri()
看不到任何練習意義。
我看着setNotificationUri()
方法的源代碼,看到它在方法裏面調用mContentResolver.registerContentObserver(mNotifyUri, true, mSelfObserver)
。 CursorLoader
也一樣。最後光標會收到消息,光標內將調用以下方法:
protected void onChange(boolean selfChange) {
synchronized (mSelfObserverLock) {
mContentObservable.dispatchChange(selfChange, null);
// ...
}
}
但是我不明白這一點。
所以我的問題是:爲什麼要在query()
中調用cursor.setNotificationUri()
方法我們的ContentProvider
執行?
謝謝你這麼好的解釋。 –
即使通過我遲到了派對, 我的問題是,這是可能的甚至是另一個應用程序正在使用此URI來查詢我們的ContentProvider? – Pankaj