Android中AutoCompleteTextView完整示例(二)

来源:互联网 发布:数控钻铣床编程 编辑:程序博客网 时间:2024/05/22 01:37
MainActivity如下:

package cc.testautocompletetextview2;import android.os.Bundle;import android.app.Activity;/** * Demo描述 * 利用自定义AutoCompleteTextView完成邮箱自动补全功能 *  * 参考资料: * 1 http://blog.csdn.net/fx_sky/article/details/9326129 * 2 http://blog.csdn.net/jwzhangjie/article/details/15771953 * 3 http://my.eoe.cn/eoe_haozi/archive/519.html * 4 http://gundumw100.iteye.com/blog/1056728 *   Thank you very much */public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.main);}}


AutoCompleteTextViewSubClass如下:

package cc.testautocompletetextview2;import java.util.ArrayList;import java.util.List;import android.content.Context;import android.graphics.Color;import android.text.Editable;import android.text.TextWatcher;import android.util.AttributeSet;import android.view.View;import android.view.ViewGroup;import android.widget.AutoCompleteTextView;import android.widget.BaseAdapter;import android.widget.Filter;import android.widget.Filterable;import android.widget.TextView;public class AutoCompleteTextViewSubClass extends AutoCompleteTextView {//可补全的邮箱后缀private static final String[] emailSuffix = { "@qq.com","@gmail.com", "@sina.com","@sohu.com"};public AutoCompleteTextViewSubClass(Context context){super(context);init(context);}public AutoCompleteTextViewSubClass(Context context, AttributeSet attrs) {super(context, attrs);init(context);}private void init(Context context){final AutoCompleteTextViewAdatper adapter = new AutoCompleteTextViewAdatper(context);setAdapter(adapter);//设置阈值//等同于布局文件中的 android:completionThreshold="2"//setThreshold(2);addTextChangedListener(new TextWatcher() {@Overridepublic void afterTextChanged(Editable editable) {String inputString = editable.toString();System.out.println("--->输入的内容 inputString="+inputString);adapter.mList.clear();if (inputString.length() > 0) {for (int i = 0; i < emailSuffix.length; ++i) {adapter.mList.add(inputString + emailSuffix[i]);}}adapter.notifyDataSetChanged();showDropDown();}@Overridepublic void beforeTextChanged(CharSequence s, int start, int count,int after) {}@Overridepublic void onTextChanged(CharSequence s, int start, int before,int count) {}});}//定义AutoCompleteTextView的Adapter继承自BaseAdapter且实现Filterable接口class AutoCompleteTextViewAdatper extends BaseAdapter implements Filterable {List<String> mList;private Context mContext;private FilterSubClass mFilter;public AutoCompleteTextViewAdatper(Context context) {mContext = context;mList = new ArrayList<String>();}@Overridepublic int getCount() {return mList == null ? 0 : mList.size();}@Overridepublic Object getItem(int position) {return mList == null ? null : mList.get(position);}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {if (convertView == null) {TextView textView = new TextView(mContext);textView.setTextColor(Color.RED);textView.setTextSize(30);convertView = textView;}TextView textView = (TextView) convertView;textView.setText(mList.get(position));return textView;}@Overridepublic Filter getFilter() {if (mFilter == null) {mFilter = new FilterSubClass();}return mFilter;}// 只有满足setThreshold(2)这个阈值时才会执行performFiltering()private class FilterSubClass extends Filter {@Overrideprotected FilterResults performFiltering(CharSequence constraint) {System.out.println("--->过滤 constraint=" + constraint.toString());FilterResults results = new FilterResults();if (mList == null) {mList = new ArrayList<String>();}results.values = mList;results.count = mList.size();return results;}@Overrideprotected void publishResults(CharSequence constraint,FilterResults results) {if (results.count > 0) {notifyDataSetChanged();} else {notifyDataSetInvalidated();}}}}}


main.xml如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"     >    <TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="自定义AutoCompleteTextView使用示例"         android:layout_centerHorizontal="true"/>        <cc.testautocompletetextview2.AutoCompleteTextViewSubClass         android:id="@+id/autoCompleteTextView"        android:layout_width="fill_parent"        android:layout_height="wrap_content"        android:layout_centerHorizontal="true"        android:layout_marginTop="30dip"        android:completionHint="请选择:"        android:dropDownVerticalOffset="2dip"        android:dropDownHorizontalOffset="2dip"        android:completionThreshold="2"    /></RelativeLayout>



0 0
原创粉丝点击