我有一個ContentProvider處理與我的應用程序相關的所有數據插入和檢索,我遵循Virgil Dobjanschi在Google I/O上建議的模式。我正在使用第一種模式。在Android ContentProvider中連接表和通知ContentObservers的最佳實踐
我的問題是,我有一個邏輯實體,由數據庫中的多個表示。
例如,我有一個Articles表和一個ArticleExtras表。文章代表文章本身,而ArticleExtras代表某些文章的附加信息,如評論數量。
我在用戶界面中使用CursorAdapter來顯示文章標題以及ListView的一行中該文章的評論數量。
爲了實現這個目標,我在Article表的ContentProvider查詢方法中添加了一條left outer join ArticleExtras on
語句,以便CursorAdapter將ArticleExtras與Article自身一起獲取。
當從Web獲取新文章時,我通過ContentProvider將其插入到數據庫中,然後CursorAdapter得到通知並更新UI,此部分按預期工作。
但是,當我提取評論數量(ArticleExtras)時,我想要通知正在監視content://com.myapp.content/Articles
中的更改的CursorAdapter,因此我可以在ListView中更新我的行。
我目前的實現是這樣的:將ArticleExtras插入數據庫後,我開始一個新的查詢來檢查Articles表是否有與我剛剛插入的ArticleExtras相關的任何行。如果是這樣,我會爲該文章創建一個新的URI(例如:content://com.myapp.cotent/Articles/123
),並且調用getContext().getContentResolver().notifyChange(uri, null)
,因此正在監視此文章更改的相應CursorAdapter將得到通知。
方法是否正確,或者是否有更好的方法來實現我想要的?