我知道Android中的AlphabetIndexer课程使用ASCII ordering来排序列表中的项目。这意味着,如果我有以小写字母开头的项目" a"它将在大写" Z"之后订购。这似乎不那么合乎逻辑。那么在这种情况下有没有办法以某种方式组合大小写字母?
这方面成功的一个很好的例子就是Viber的联系人列表,他们并没有设法放置" Y"和" y"在同一部分,但也显示两个字母" Yy"在SectionIndexer中。那么有可能用默认的AlphabetIndexer来实现吗?有没有人遇到过这种问题?
答案 0 :(得分:2)
似乎这个问题的解决方案更容易,但有点棘手。 看起来问题不在于AlphabetIndexer本身,而是在光标中对元素进行排序的方式。 所以我为解决这个问题所做的一切就是在我的SQL查询中添加一个正确的 COLLATE 。
所以我将以下内容添加为排序顺序:
private final String SORT_ORDER = Contacts.DISPLAY_NAME_PRIMARY + " COLLATE LOCALIZED ASC";
注意: Contacts.DISPLAY_NAME_PRIMARY
适用于API 11+ ...对于您需要的较低API Contacts.DISPLAY_NAME
。
P.S我认为这是我解决这个问题的唯一方法,但我不记得。如果没有帮助,请告诉我,我会再次查看我的代码。
答案 1 :(得分:1)
如果您希望排序不区分大小写,则需要创建自己的AlphabetIndexer扩展并覆盖Compare函数以比较相同情况下的字符串