Рекомендации по объединению таблиц и уведомлению ContentObservers в Android ContentProvider

У меня есть 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, отслеживающий изменения этой статьи, получил уведомление.

Правилен ли подход или есть ли лучший способ реализовать то, что я хочу?

15
задан CarlLee 10 August 2012 в 04:04
поделиться