Android autocompletetextview с приблизительным соответствием строк

Я разрабатываю приложение, в котором около 8000 названий городов Индии. И когда пользователь вводит, я использую автозаполнение, чтобы помочь пользователю выполнить работу. Но некоторые названия городов имеют написание, которое сложно угадать жителям других штатов. Поэтому нам нужно приблизительное совпадение строк для автозаполнения, а не точное соответствие, которое используется по умолчанию.

Например, есть такие имена, как

  • Тирумайлай
  • Тирунеттур
  • Тирутурайюр
  • Тируварур

А также

  • Тирунелвели
  • Тирумангалам

Если пользователь ищет город «Тирунелвели», но вводит текстовое поле как «Тирунел», в представлении автозаполнения не отображается имя, и оно точно соответствует строке.

Что мне делать, чтобы получить приблизительные совпадающие строки в раскрывающемся списке автозаполнения.


person Jeyanth Kumar    schedule 27.04.2012    source источник


Ответы (2)


Вам необходимо создать собственный ArrayAdapter с пользовательским фильтром (который основан на том, что лексографическое расстояние меньше определенный порог (скажем, 3)), который вам нужно вернуть в методе getFilter() вашего адаптера.

person st0le    schedule 27.04.2012

После долгих поисков и экспериментов я сам нашел решение.

Чтобы выполнить пользовательское сопоставление строк, нам нужен пользовательский адаптер массива, который нам нужно расширить класс ArrayAdapter и написать наш собственный алгоритм сопоставления строк.

Нам нужно переопределить метод getFilter класса ArrayAdapter для этой функциональности и добавить методы getItem и getCount в наш собственный класс адаптера.

person Jeyanth Kumar    schedule 14.05.2012
comment
Меня гораздо больше интересует техника, которую вы использовали для приблизительного сопоставления строк. - person hitmaneidos; 09.04.2014