У меня есть ContentProvider, который обрабатывает всю вставку и извлечение данных, связанных с моим приложением, я следую шаблону, предложенному Вирджилом Добьянски в Google I/O. Я использую первый шаблон.
Моя проблема в том, что у меня есть логическая сущность, представленная несколькими таблицами в базе данных.
Например, у меня есть таблица Articles и таблица ArticleExtras. Articles представляет саму статью, а ArticleExtras представляет дополнительную информацию об определенной статье, например, количество комментариев.
Я использовал CursorAdapter в пользовательском интерфейсе, чтобы отобразить заголовок статьи и количество комментариев к этой статье в одной строке ListView.
Чтобы реализовать это, я добавил оператор left outer join ArticleExtras on
в свой метод запроса ContentProvider для таблицы Article, чтобы CursorAdapter мог получить ArticleExtras вместе с самой статьей.
Когда новые статьи загружаются из Интернета, я вставляю их в базу данных через ContentProvider,а затем CursorAdapter получил уведомление и обновил пользовательский интерфейс, эта часть сработала, как и ожидалось.
Но когда я получил количество комментариев (ArticleExtras ), я хочу, чтобы тот же CursorAdapter, который отслеживает изменения в content://com.myapp.content/Articles
, также получал уведомления, чтобы я мог обновить свою строку в ListView.
Моя текущая реализация такова :После вставки ArticleExtras в базу данных я запускаю новый запрос, чтобы проверить, есть ли в таблице Articles какие-либо строки, связанные с только что вставленными статьями. Если да, то я сделаю новый uri для этой статьи (, например :content://com.myapp.cotent/Articles/123
). и вызовите getContext().getContentResolver().notifyChange(uri, null)
, чтобы соответствующий CursorAdapter, отслеживающий изменения этой статьи, получил уведомление.
Правилен ли подход или есть ли лучший способ реализовать то, что я хочу?