Вот интересный вопрос, который я в шоке, чаще всего не задавался в Интернете. CursorAdapters для Android чрезвычайно полезны после того, как вы запустите ContentProvider и узнаете, как его использовать, но они ограничены из-за необходимости наличия поля _id в качестве части их запроса (без него выдается ошибка). И вот почему:
Моя конкретная проблема заключается в том, что у меня есть два счетчика: один счетчик должен содержать уникальные имена "категорий" из базы данных, а другой должен заполняться всеми записями базы данных из выбранной "категории" (категория является именем столбца, здесь ). Это похоже на довольно простую установку, которую могут использовать многие программы, не так ли? Попытка реализовать этот первый блесна - вот где я столкнулся с проблемами.
Вот запрос, который я хотел бы получить для этого первого счетчика:
SELECT DISTINCT category FROM table;
Выполнение этого запроса приводит к возникновению ошибки в CursorAdapter, поскольку столбец _id является частью запроса. Добавление столбца _id в проекцию естественным образом возвращает каждую строку таблицы, поскольку теперь вы также запрашиваете разные идентификаторы, и каждый идентификатор отличается (по определению). Очевидно, что я предпочел бы видеть только одну запись на название категории.
Я уже реализовал обходной путь, который заключается в том, чтобы просто выполнить приведенный выше запрос и затем скопировать результаты в ArrayAdapter. Моя причина для этого поста состоит в том, чтобы увидеть, было ли более изящное решение этой странной маленькой проблемы, и начать обсуждение того, что я мог бы сделать лучше. Альтернативные предложения по реализации, такие как использование различных видов элементов управления или адаптеров, очень приветствуются.