Объединение строчных и прописных букв в Android AlphabetIndexer
Я знаю, что класс AlphabetIndexer в Android использует порядок ASCII для упорядочивания элементов в списке. Это означает, что если у меня есть элементы, начинающиеся, например, со строчной буквы "а", то они будут упорядочены после прописной буквы "Z", что кажется не очень логичным. Так есть ли способ как-то комбинировать строчные и прописные буквы в подобных ситуациях?
Хорошим примером успеха в этом является список контактов Viber, им не только удалось поместить "Y" и "y" в один и тот же раздел, но также показать две буквы "Yy" в SectionIndexer. Так можно ли добиться по умолчанию AlphabetIndexer? Есть ли у кого-нибудь опыт с такой проблемой?
2 ответа
Оказалось, что решение этой проблемы проще, но немного сложнее. Кажется, что проблема не в самом AlphabetIndexer, а в том, как элементы упорядочены в курсоре, который он получает. Поэтому все, что я сделал для решения этой проблемы, - это добавление правильного COLLATE в мой SQL-запрос.
Поэтому я добавил следующее в качестве порядка сортировки:
private final String SORT_ORDER = Contacts.DISPLAY_NAME_PRIMARY + " COLLATE LOCALIZED ASC";
Замечания: Contacts.DISPLAY_NAME_PRIMARY
для API 11+ ... для более низких API вам нужно Contacts.DISPLAY_NAME
,
PS Я думаю, что это было единственное, что я сделал, чтобы решить эту проблему, но я точно не помню. Если это не поможет, пожалуйста, скажите мне, и я снова посмотрю на мой код.
Если вы хотите, чтобы порядок не учитывал регистр, вам нужно создать собственное расширение AlphabetIndexer и перезаписать функцию Compare, чтобы сравнить строки в одном и том же случае.