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