您可以使用自定义的适配器来实现这个功能。下面是一个示例代码:
class CityAdapter(context: Context, private val cities: List) : ArrayAdapter(context, 0, cities) {
override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
val view = convertView ?: LayoutInflater.from(context).inflate(android.R.layout.simple_dropdown_item_1line, parent, false)
val city = cities[position]
val textView = view.findViewById(android.R.id.text1)
textView.text = city.name
return view
}
override fun getFilter(): Filter {
return object : Filter() {
override fun performFiltering(constraint: CharSequence?): FilterResults {
val results = FilterResults()
results.values = if (constraint.isNullOrEmpty()) cities else cities.filter { it.name.contains(constraint.toString(), ignoreCase = true) }
results.count = (results.values as List).size
return results
}
override fun publishResults(constraint: CharSequence?, results: FilterResults?) {
@Suppress("UNCHECKED_CAST")
clear()
addAll(results?.values as List)
notifyDataSetChanged()
}
override fun convertResultToString(resultValue: Any?): CharSequence {
return (resultValue as? City)?.name ?: ""
}
}
}
}
data class City(val name: String, val code: String)
val cities = listOf(
City("北京", "BJ"),
City("上海", "SH"),
City("广州", "GZ"),
// 添加更多的城市...
)
val autoCompleteTextView = findViewById(R.id.autoCompleteTextView)
val adapter = CityAdapter(this, cities)
autoCompleteTextView.setAdapter(adapter)
autoCompleteTextView.setOnItemClickListener { parent, view, position, id ->
val selectedCity = parent.getItemAtPosition(position) as City
val cityName = selectedCity.name
val cityCode = selectedCity.code
// 处理点击事件,获取两个值 cityName 和 cityCode
}
这样,当用户在 AutoCompleteTextView 中输入文字时,它会根据输入的内容过滤出匹配的城市,并显示在下拉列表中。当用户选择一个城市时,您可以通过 OnItemClickListener 获取到选中的城市的名称和代码。