AutoCompleteTextView实现邮箱自动填充

来源:互联网 发布:51黑单片机论坛 编辑:程序博客网 时间:2024/05/22 07:50
最近做项目做登录的时候用到了邮箱登录,想实现邮箱的一边输入一边自动填充的功能,上网找了一下,找到了一个基本能够这个功能的例子,网上很多的例子都是在输入“@”之后并不能根据后面输入的内容来过滤掉不符合条件的邮箱,虽然大多数用户在输入完用户名之后就会在下拉列表中找到并点击列表自动填上后面的内容,但总感觉这样不太完美,所以就拿来改了一下,实现了过滤功能。好了,废话不多说了,上代码。

MainActivity.java
?
代码片段,双击复制
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
packagecom.guet.zhuge;
 
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.text.Editable;
importandroid.text.TextWatcher;
importandroid.widget.AutoCompleteTextView;
 
publicclass MainActivity extendsActivity implementsTextWatcher{
 
        privateAutoCompleteTextView autoview;
        privateAutoTextViewAdapter adapter;
         
        privatestatic final String[] AUTO_EMAILS = {"@163.com","@sina.com","@qq.com","@126.com","@gmail.com","@apple.com"};
         
        @Override
        protectedvoid onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
                autoview = (AutoCompleteTextView) findViewById(R.id.auto_tv);
                adapter = newAutoTextViewAdapter(this);
                autoview.setAdapter(adapter);
                autoview.setThreshold(1);//输入1个字符时就开始检测,默认为2个
                autoview.addTextChangedListener(this);//监听autoview的变化
        }
 
        @Override
        publicvoid afterTextChanged(Editable s) {
                // TODO Auto-generated method stub
                String input = s.toString();  
        adapter.mList.clear();  
        autoAddEmails(input);
        adapter.notifyDataSetChanged();  
        autoview.showDropDown();  
        }
         
        /**
         * 自动填充邮箱列表
         * @param input
         */
        privatevoid autoAddEmails(String input) {
                System.out.println("input-->"+ input);
                String autoEmail = "";
        if(input.length() > 0) {  
            for(inti = 0; i < AUTO_EMAILS.length; ++i) {  
                    if(input.contains("@")) {//包含“@”则开始过滤
                            String filter = input.substring(input.indexOf("@") + 1, input.length());//获取过滤器,即根据输入“@”之后的内容过滤出符合条件的邮箱
                            System.out.println("filter-->"+ filter);
                            if(AUTO_EMAILS<i>.contains(filter)) {//符合过滤条件
                                    autoEmail = input.substring(0, input.indexOf("@")) + AUTO_EMAILS<i>;//用户输入“@”之前的内容加上自动填充的内容即为最后的结果
                                    adapter.mList.add(autoEmail);
                            }
                    }else{
                            autoEmail = input + AUTO_EMAILS<i>;
                            adapter.mList.add(autoEmail);
                    }
            }  
        }
        }
 
        @Override
        publicvoid beforeTextChanged(CharSequence arg0, intarg1, intarg2,
                        intarg3) {
                // TODO Auto-generated method stub
                 
        }
 
        @Override
        publicvoid onTextChanged(CharSequence arg0, intarg1, intarg2, intarg3) {
                // TODO Auto-generated method stub
                 
        }
}
</i></i></i>


AutoTextViewAdapter.java
?
代码片段,双击复制
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
packagecom.guet.zhuge;
 
importjava.util.ArrayList;
importjava.util.List;
 
importandroid.content.Context;
importandroid.graphics.Color;
importandroid.view.View;
importandroid.view.ViewGroup;
importandroid.widget.BaseAdapter;
importandroid.widget.Filter;
importandroid.widget.Filterable;
importandroid.widget.TextView;
 
 
publicclass AutoTextViewAdapter extendsBaseAdapter implementsFilterable {  
           
        publicList<String> mList;  
   privateContext mContext;  
   privateMyFilter mFilter;  
       
   publicAutoTextViewAdapter(Context context) {  
        mContext = context;  
        mList = newArrayList<String>();  
   }  
       
   @Override  
   publicint getCount() {  
        returnmList == null? 0: mList.size();  
   }  
 
   @Override  
   publicObject getItem(intposition) {  
        returnmList == null? null: mList.get(position);  
   }  
 
   @Override  
   publiclong getItemId(intposition) {  
        returnposition;  
   }  
 
   @Override  
   publicView getView(intposition, View convertView, ViewGroup parent) {  
        if(convertView == null) {  
            TextView tv = newTextView(mContext);  
            tv.setTextColor(Color.BLACK);  
            tv.setTextSize(20);  
            convertView = tv;  
        }  
        TextView txt = (TextView) convertView;  
        txt.setText(mList.get(position));  
        returntxt;  
   }  
 
   publicFilter getFilter() {  
        if(mFilter == null) {  
            mFilter = newMyFilter();  
        }  
        returnmFilter;  
   }  
    
   privateclass MyFilter extendsFilter {  
             
            @Override  
            protectedFilterResults performFiltering(CharSequence constraint) {  
                    FilterResults results = newFilterResults();  
                    if(mList == null) {  
                            mList = newArrayList<String>();  
                    }  
                    results.values = mList;  
                    results.count = mList.size();  
                    returnresults;  
            }  
             
            @Override  
            protectedvoid publishResults(CharSequence constraint, FilterResults results) {  
                    if(results.count > 0) {  
                            notifyDataSetChanged();  
                    }else{  
                            notifyDataSetInvalidated();  
                    }  
            }  
             
   }  
}


运行截图: QQ截图20130527012704.png QQ截图20130527012729.png 


附上工程源码:  AutoCompleteEmailDemo.zip (1017.25 KB, 下载次数: 67)