我有一个 ContentProvider 来处理与我的应用程序相关的所有数据插入和检索,我遵循 Virgil Doobjanschi 在 Google I/O 上建议的模式。我正在使用第一种模式。
我的问题是我有一个由数据库中的多个表表示的逻辑实体。
例如,我有一个 Articles 表和一个 ArticleExtras 表。 Articles 代表文章本身,而 ArticleExtras 代表有关特定文章的附加信息,例如评论数量。
我在 UI 中使用 CursorAdapter 在 ListView 的一行中显示文章标题和该文章的评论数。
为了实现这一点,我添加了一个left outer join ArticleExtras on
在我的 ContentProvider 查询方法中对 Article 表进行声明,以便 CursorAdapter 获取 ArticleExtras 以及文章本身。
当从网络上获取新文章时,我通过 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 将收到通知。
该方法是否正确,或者是否有更好的方法来实现我想要的?