我有一个 ContentProvider 来处理与我的应用程序相关的所有数据插入和检索,我遵循 Virgil Dobjanschi 在 Google I/O 上建议的模式。我正在使用第一种模式。
我的问题是我有一个由数据库中的多个表表示的逻辑实体。
例如,我有一个 Articles 表和一个 ArticleExtras 表。Articles 代表文章本身,而 ArticleExtras 代表有关特定文章的附加信息,例如评论数。
我在 UI 中使用 CursorAdapter 在 ListView 的一行中显示文章标题和该文章的评论数。
为了实现这一点,我left outer join ArticleExtras on
在我的 ContentProvider 查询方法中为 Article 表添加了一条语句,以便 CursorAdapter 获取 ArticleExtras 以及 Article 本身。
当从 Web 获取新文章时,我通过 ContentProvider 将其插入数据库,然后通知 CursorAdapter 并更新 UI,这部分按预期工作。
但是当我获取评论的数量 (ArticleExtras) 时,我希望同样的 CursorAdapter 也content://com.myapp.content/Articles
收到通知,它正在监视 , 中的变化,因此我可以更新我在 ListView 中的行。
我当前的实现是这样的:在将 ArticleExtras 插入数据库之后,我开始一个新的查询来检查 Articles 表是否有任何与我刚刚插入的 ArticleExtras 相关的行。如果是这样,我将为那篇文章创建一个新的 uri(例如:) content://com.myapp.cotent/Articles/123
,然后调用getContext().getContentResolver().notifyChange(uri, null)
,因此正在监视这篇文章的更改的相应 CursorAdapter 将得到通知。
该方法是否正确,还是有更好的方法来实现我想要的?