У меня есть следующее ArrayAdapter :
class SearchAdapter(private val activity: Activity, private var species: ArrayList<Specie>) : ArrayAdapter<Specie>(activity, R.layout.specie_item, species) {
override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
return convertView ?: createView(position, parent)
}
private fun createView(position: Int, parent: ViewGroup?): View {
val specie = species[position]
val view = LayoutInflater.from(context).inflate(R.layout.specie_item, parent, false)
view.specie_text.text = specie.name
return view
}
override fun getCount() = species.size
override fun getItem(position: Int) = species[position]
override fun getFilter() = filter
private var filter: Filter = object : Filter() {
override fun performFiltering(constraint: CharSequence?): Filter.FilterResults {
val results = FilterResults()
val query = if (constraint != null && constraint.isNotEmpty()) autocomplete(constraint.toString())
else arrayListOf()
results.values = query
results.count = query.size
return results
}
private fun autocomplete(input: String): ArrayList<Specie> {
val results = arrayListOf<Specie>()
for (specie in species) {
if (specie.name.toLowerCase().contains(input.toLowerCase())) results.add(specie)
}
return results
}
override fun publishResults(constraint: CharSequence?, results: Filter.FilterResults) {
if (results.count > 0) notifyDataSetChanged()
else notifyDataSetInvalidated()
}
override fun convertResultToString(result: Any) = (result as Specie).name
}
}
Цель этого адаптера - показать некоторые предложения, когда мы вводим что-то в AutoCompleteTextview .Для этого у меня есть фильтр, который ищет названия видов в соответствии с пользовательским вводом.Проблема в том, что этот фильтр работает не так, как я ожидал:
Пока все в порядке.Он показывает все названия видов, которые начинаются с agro
Но после ввода чего-то большего, он больше не фильтруется.На нем должны отображаться названия видов, начинающиеся с agrostis cas , но все еще отображаются Agrostis azorica .
Мой фильтр плохой?Я пробовал другие способы фильтрации, но получил точно такой же результат.