Android SimpleCursorAdapter с запросами, использующими DISTINCT

Вот интересный вопрос, который, я шокирован, не так часто задают в Интернете. Android ' s CursorAdapters чрезвычайно полезны после того, как вы запустите ContentProvider и научитесь его использовать, но они ограничены из-за их требования наличия поля _id как части их запроса (без него выдается ошибка). Вот почему:

Моя конкретная проблема заключается в том, что у меня есть два счетчика: один счетчик должен содержать уникальные имена «категорий» из базы данных, а другой должен заполняться всеми записями базы данных из выбранной «категории» (категория является столбцом имя, здесь). Кажется, это довольно простая установка, которую могут использовать многие программы, не так ли? При попытке реализовать этот первый счетчик я столкнулся с проблемами.

Вот запрос, который мне нужен для этого первого счетчика:

SELECT DISTINCT category FROM table;

Выполнение этого запроса вызывает ошибку в CursorAdapter, потому что столбец _id требуется как часть запрос. Добавление столбца _id в проекцию естественным образом возвращает каждую строку таблицы, поскольку теперь вы также запрашиваете различные идентификаторы, и каждый идентификатор отличается (по определению). Очевидно, я бы предпочел видеть только одну запись для каждого названия категории.

Я уже реализовал обходной путь, который заключается в том, чтобы просто выполнить указанный выше запрос и затем скопировать результаты в ArrayAdapter. Моя причина для этого поста - посмотреть, есть ли более элегантное решение этой странной маленькой проблемы, и начать обсуждение того, что я мог бы сделать лучше. Приветствуются предложения по альтернативной реализации, например, использование различных элементов управления или адаптеров.

11
задан SilithCrowe 15 February 2011 в 14:14
поделиться