这是一个有趣的问题,我很震惊在互联网上没有被更多地问到。一旦您启动并运行 ContentProvider 并学习如何使用它,Android 的 CursorAdapters 就非常有用,但由于要求将 _id 字段作为查询的一部分(没有它会引发错误),因此它们受到限制。原因如下:
我的具体问题是我有两个微调器:一个微调器应包含数据库中唯一的“类别”名称,另一个应填充所选“类别”中的所有数据库条目(类别为列名,此处)。这似乎是许多程序可能使用的非常简单的设置,不是吗?尝试实现第一个微调器是我遇到问题的地方。
这是我想要的第一个微调器的查询:
SELECT DISTINCT category FROM table;
进行此查询会在 CursorAdapter 上引发错误,因为 _id 列是查询的一部分。将 _id 列添加到投影中自然会返回表的每一行,因为您现在也要求不同的 id,并且每个 id 都是不同的(根据定义)。显然,我宁愿每个类别名称只看到一个条目。
我已经实现了一个变通方法,即简单地进行上面的查询,然后将结果复制到 ArrayAdapter 中。我写这篇文章的原因是想看看这个奇怪的小问题是否有更优雅的解决方案,并开始讨论我可以做得更好的地方。非常欢迎替代实施建议,例如使用不同类型的控件或适配器。