Aquí hay una pregunta interesante que me sorprende que no se haya preguntado con más frecuencia en Internet. Los CursorAdapters de Android son extremadamente útiles una vez que obtienes un ContentProvider y aprendes cómo usarlo, pero están limitados debido a su requisito de tener el campo _id como parte de su consulta (se produce un error sin él). He aquí por qué:SimpleCursorAdapter de Android con consultas usando DISTINCT
Mi problema específico es que tengo dos spinners: un spinner debe contener nombres únicos de "categoría" de la base de datos, y el otro debe llenar con todas las entradas de la base de datos de la "categoría" seleccionada (categoría que es nombre de la columna, aquí). Esto parece una configuración bastante simple que muchos programas podrían usar, ¿no? Tratar de implementar ese primer spinner es donde he tenido problemas.
Aquí está la consulta que quisiera para ese primer spinner:
SELECT DISTINCT category FROM table;
Hacer esta consulta genera un error en CursorAdapter porque se requiere la columna _ID como parte de la consulta. La adición de la columna _id a la proyección, naturalmente, devuelve cada fila de la tabla, ya que ahora también está solicitando identificadores distintos, y cada identificación es distinta (por definición). Obviamente, preferiría ver solo una entrada por nombre de categoría.
Ya he implementado una solución alternativa, que es simplemente hacer la consulta de arriba y luego copiar los resultados en un ArrayAdapter. Mi razón para este post es ver si había una solución más elegante para este pequeño y extraño problema y comenzar una discusión sobre lo que podría estar haciendo mejor. Sugerencias alternativas de implementación, como el uso de diferentes tipos de controles o adaptadores, son bienvenidos.
Oh, esto se parece a un excelente diseño de base de datos a ¡yo! Con el objetivo de mantener mi proveedor de contenido lo más simple posible, he recibido instrucciones de mantener el número de tablas al mínimo, o de lo contrario estaría haciendo lo que sugiera. Gracias por agregar esto! – SilithCrowe
Su proveedor de contenido puede manejar saltear el nombre de categoría dentro y fuera de las filas suministradas y devuelto desde allí mediante el uso de una consulta de varias tablas. Eche un vistazo a la instrucción SQL "join". –