我有一个 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 将得到通知。
该方法是否正确,还是有更好的方法来实现我想要的?