【问题标题】:Combine lower and upper case letters in Android AlphabetIndexer在 Android AlphabetIndexer 中组合小写和大写字母
【发布时间】:2014-04-17 19:54:21
【问题描述】:

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

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

【问题讨论】:

    标签: android sectionindexer


    【解决方案1】:

    看起来这个问题的解决方案更容易但有点棘手。 似乎问题不在于 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 我认为这是我为解决此问题所做的唯一事情,但我不太记得了。如果它没有帮助,请告诉我,我会再次查看我的代码。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 就是这么简单!谢谢。所以我只是在自己的 AlphabetIndexer 实现中改变了这一点:protected int compare(String word, String letter) { return super.compare(word.toUpperCase(), letter); }
      • @Andranik 我为我的问题尝试了上述解决方案,但没有任何效果。我添加了自己的CustomAlphabetIndexer 并做了上述评论,但没有任何变化。
      • 是的,很抱歉回复晚了,但经过一些测试我也注意到这个解决方案不起作用,我只是没有时间发布正确的解决方案。我现在将其发布在这里..我已取消选择此答案作为正确答案...
      猜你喜欢
      • 2020-08-04
      • 1970-01-01
      • 2013-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多