【发布时间】:2018-11-18 16:18:51
【问题描述】:
我有以下 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 中键入内容时显示一些建议。为此,我有一个过滤器,可以根据用户输入搜索物种名称。问题是这个过滤器没有像我预期的那样工作:
开头的物种名称但是在输入更多内容后,它不再过滤。它应该显示以 agrostis cas 开头的物种名称,但仍显示 Agrostis azorica。 p>
我的过滤器坏了吗?我尝试了一些其他的过滤方式,但我得到了完全相同的结果。
【问题讨论】:
标签: android filter kotlin android-arrayadapter comparator