2012-08-10 46 views
15

我有一個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將得到通知。

方法是否正確,或者是否有更好的方法來實現我想要的?

回答

5

結帳ContactsProvider2,在其中它們將通知uri設置爲AUTHORITY_URI,這似乎是供應商中其他URI的全部內容。我有同樣的探測器,我已經嘗試過這個自己的提供者有多個表和連接在這些表上,並且它工作正常。