我知道 Android 中的AlphabetIndexer类使用ASCII 排序来对列表中的项目进行排序。这意味着如果我有以小写“a”开头的项目,它将在大写“Z”之后排序,这似乎不那么合乎逻辑。那么有没有办法在这种情况下以某种方式组合小写和大写字母?
成功的一个很好的例子是 Viber 的联系人列表,他们不仅设法将“Y”和“y”放在同一部分,而且还在 SectionIndexer 中显示两个字母“Yy”。那么是否可以使用默认的 AlphabetIndexer 来实现?有没有人遇到过这类问题?
我知道 Android 中的AlphabetIndexer类使用ASCII 排序来对列表中的项目进行排序。这意味着如果我有以小写“a”开头的项目,它将在大写“Z”之后排序,这似乎不那么合乎逻辑。那么有没有办法在这种情况下以某种方式组合小写和大写字母?
成功的一个很好的例子是 Viber 的联系人列表,他们不仅设法将“Y”和“y”放在同一部分,而且还在 SectionIndexer 中显示两个字母“Yy”。那么是否可以使用默认的 AlphabetIndexer 来实现?有没有人遇到过这类问题?
看起来这个问题的解决方案更容易但有点棘手。似乎问题不在于 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
。
PS我认为这是我为解决这个问题所做的唯一事情,但我不记得了。如果它没有帮助,请告诉我,我会再次查看我的代码。
如果您希望排序不区分大小写,则需要创建自己的 AlphabetIndexer 扩展并覆盖比较函数以比较相同大小写的字符串