Предисловие Однажды мне понадобилось отображать в одном ListView карточки разных типов, да ещё полученные с сервера по разным API. Мол, пусть пользователь порадуется и увидит в одной ленте новостей:
- видеокарты с тамнамами и описаниями;
- карточки авторов или теги, с большой кнопкой «подписаться».
Вторая сложность заключалась в том, что источниками данных для карточек могли быть совершенно разные ресурсы сервера; список пришлось собирать с помощью одновременных запросов к нескольким различным API, возвращающих разные типы данных.
Ну а чтобы жизнь медом не казалась, API сервера изменить нельзя.
От API к ListView
Вирджил Добьянски Google Ввод/Вывод 2010 г.прекрасно объяснил, как реализовать взаимодействие с REST API. Самый первый шаблон гласит:
- Действие создает Службу, которая отправляет запрос к REST API;
- Сервис анализирует ответ и сохраняет данные в базу данных через ContentProvider;
- Activity получает уведомление о том, что данные изменились, и обновляет представление.
Вот как всё работает в итоге: делаем кучу запросов к API, вставляем данные с помощью ContentProvider в отдельные таблицы, связанные с типами ресурсов REST, и уведомляем с помощью notifyChange о наличии новых данных в фиде.
Но, как обычно, есть две проблемы:
- Как правильно отобразить список карт?
- Как собрать запрос на фид?
Отображение разных типов карт
Для начала разберемся с тем, что проще.Решение легко найти в Google, поэтому приведу его кратко.
В адаптер список карточек мы переопределяем методы:
Теги: #Android #union #merge #ListView #ContentProvider #CursorAdapter #MergeCursor #Разработка для Android@Override int getViewTypeCount() {
Вместе с данным постом часто просматривают:
-
Kodak Против Apple И Rim. Новый Иск
19 Oct, 24 -
Яндекс Открыл Новый Офис В Калифорнии
19 Oct, 24 -
Вы Играете В Компьютерные Игры?
19 Oct, 24 -
В Капусте Нашли Аиста
19 Oct, 24 -
Онлайн-Кинотеатр
19 Oct, 24