当前位置: 移动技术网 > IT编程>移动开发>Android > Android AutoCompleteTextView控件使用实例

Android AutoCompleteTextView控件使用实例

2019年07月24日  | 移动技术网IT编程  | 我要评论

qqip追踪器,极品学生修道,一周的偶像少女时代

使用要点如下:

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;
            }

        };
    }
}

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网