2013-09-18 2 views
0

Im используя фильтр для ArrayAdapter. Теперь я хотел бы иметь следующую особенность:onTextChanged пользовательский фильтр german umlauts

Для примера мой ListView содержит слово käuflich и поиск ввода является kauf, käuflich должен отображаться как результат. Поэтому ö, ä, ü следует дополнительно заменить на o, a, u. Возможно ли это?

Это мой простой фильтр

public void onTextChanged(CharSequence cs, int arg1, int arg2, int arg3) { 
     // When user changed the Text 
     Activity.this.adapter.getFilter().filter(cs); 
    } 

Благодаря

ответ

1

Вы можете использовать java.text.Normalizer для удаления акцентов. Когда итерация элементов списка в Filter.performFiltering(CharSequence), сделайте следующее:

for(int i = 0; i<Original_Names.size(); i++){ 
    filterableString = Original_Names.get(i); 

    String s = Normalizer.normalize(filterableString, Form.NFD); 

    // Remove Accents 
    String withoutAccents = 
     s.replaceAll("\\p{InCombiningDiacriticalMarks}+", ""); 

    if(withoutAccents.toLowerCase().contains(filterString)){ 
     Filtered_Names.add(filterableString); 
    } 
} 

Слово предостережения здесь: Link

+0

Спасибо, реализован код, но поиск очень медленно. Список My Array заполняется из SQL-запроса, может это проблема? – Oli

+0

@ Oli Да, это может быть проблемой. Но, извините, я не могу дать вам верный ответ. Правильно ли фильтруется список? – Vikram

Смежные вопросы