1

我知道 Android 中的AlphabetIndexer类使用ASCII 排序来对列表中的项目进行排序。这意味着如果我有以小写“a”开头的项目,它将在大写“Z”之后排序,这似乎不那么合乎逻辑。那么有没有办法在这种情况下以某种方式组合小写和大写字母?

成功的一个很好的例子是 Viber 的联系人列表,他们不仅设法将“Y”和“y”放在同一部分,而且还在 SectionIndexer 中显示两个字母“Yy”。那么是否可以使用默认的 AlphabetIndexer 来实现?有没有人遇到过这类问题?

在此处输入图像描述

4

2 回答 2

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

PS我认为这是我为解决这个问题所做的唯一事情,但我不记得了。如果它没有帮助,请告诉我,我会再次查看我的代码。

于 2014-04-30T08:00:21.277 回答
1

如果您希望排序不区分大小写,则需要创建自己的 AlphabetIndexer 扩展并覆盖比较函数以比较相同大小写的字符串

于 2014-04-17T20:03:13.870 回答