下面是编程之家 jb51.cc 通过网络收集整理的代码片段。
编程之家小编现在分享给大家,也给大家做个参考。
- 利用
ListAdapter
(一般使用ArrayAdapter
)为AutoCompleteTextView
提供数据,若有需要还可以重载getView()
以自定义列表项的显示方式。这一步同ListView
。 - 如果需要根据输入内容进行动态提示,那么adapter需要实现
Filterable
接口,重载getFilter()
函数实现提示算法。getFilter()
需返回Filter
对象,该对象包含至少两个方法:performFiltering()
在后台执行过滤,publishResults()
在UI线程执行,负责将过滤结果显示到列表中。还有第三个方法convertResultToString()
可以控制用户点击提示时要填充至输入框的文本内容。
AutoCompleteTextView autoComplete = new AutoCompleteTextView(context); autoComplete.setThreshold(2); // 设置最少几个字符触发自动完成 MyAdapter adapter = new MyAdapter(context); autoComplete.setAdapter(adapter); /** * Adapter定义 */ class MyAdapter extends ArrayAdapter<MyObject> implements Filterable{ @Override public View getView(int position,View convertView,ViewGroup parent) { // define your list item view here 在此处定义列表项的视图 } /** * 实现自动完成的过滤算法 */ @Override public Filter getFilter() { Filter filter = new Filter() { /** * 本方法在后台线程执行,定义过滤算法 */ @Override protected FilterResults performFiltering(CharSequence constraint) { String keyword = String.valueOf(constraint).toLowerCase(); // 此处实现过滤 // 过滤后利用FilterResults将过滤结果返回 FilterResults filterResults = new FilterResults(); filterResults.values = results; // results是上面的过滤结果 filterResults.count = results.size(); // 结果数量 return filterResults; } /** * 本方法在UI线程执行,用于更新自动完成列表 */ @Override protected void publishResults(CharSequence constraint,FilterResults results) { if (results != null && results.count > 0) { // 有过滤结果,显示自动完成列表 MyAdapter.this.clear(); // 清空旧列表 MyAdapter.this.addAll((List<MyObject>)results.values); notifiDataSetChanged(); } else { // 无过滤结果,关闭列表 notifyDataSetInvalidated(); } } /** * 如果需要控制提示文本的显示方式,重载此函数 */ @Override public CharSequence convertResultToString(Object resultValue) { MyObject obj = (MyObject) resultValue; return obj.name; } }; } }
以上是编程之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。
如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。