Android AutoCompleteTextView控件使用实例
使用要点如下:
1.利用listadapter(一般使用arrayadapter)为autocompletetextview提供数据,若有需要还可以重载getview()以自定义列表项的显示方式。这一步同listview。
2.如果需要根据输入内容进行动态提示,那么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;
}
};
}
}
上一篇: 合上笔记本后,如何继续下载?
下一篇: 正则表达式详解