main.xml如下:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="vertical" > <AutoCompleteTextView android:id="@+id/edit" android:layout_width="230dip" android:layout_height="wrap_content" android:textSize="20sp" android:layout_gravity="center_horizontal" android:layout_marginTop="20dip" /> </LinearLayout>
程序代碼如下:
package com.android.system.AutoComplete; import java.util.ArrayList; import java.util.List; import android.app.Activity; import android.content.Context; import android.graphics.Color; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; import android.view.LayoutInflater; 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 AutoComplete extends Activity { AutoCompleteTextView autoview; // default city String[] stringArray = { "@163.com", "@126.com", "@qq.com", "@sina.com", "@taobao.com" }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); autoview = (AutoCompleteTextView) findViewById(R.id.edit); // adapter = new ArrayAdapter<String>(this, android.R.layout.simple_dropdown_item_1line, stringArray); final MyAdatper adapter = new MyAdatper(this); autoview.setAdapter(adapter); autoview.addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) { } @Override public void beforeTextChanged(CharSequence s, int start, int count, int after) { } @Override public void afterTextChanged(Editable s) { String input = s.toString(); adapter.mList.clear(); if (input.length() > 0) { for (int i = 0; i < stringArray.length; ++i) { adapter.mList.add(input + stringArray[i]); } } adapter.notifyDataSetChanged(); autoview.showDropDown(); } }); // default=2 autoview.setThreshold(1); } class MyAdatper extends BaseAdapter implements Filterable { List<String> mList; private Context mContext; private MyFilter mFilter; public MyAdatper(Context context) { mContext = context; mList = new ArrayList<String>(); } @Override public int getCount() { return mList == null ? 0 : mList.size(); } @Override public Object getItem(int position) { return mList == null ? null : mList.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { TextView tv = new TextView(mContext); tv.setTextColor(Color.BLACK); tv.setTextSize(20); convertView = tv; } TextView txt = (TextView) convertView; txt.setText(mList.get(position)); return txt; } @Override public Filter getFilter() { if (mFilter == null) { mFilter = new MyFilter(); } return mFilter; } private class MyFilter extends Filter { @Override protected FilterResults performFiltering(CharSequence constraint) { FilterResults results = new FilterResults(); if (mList == null) { mList = new ArrayList<String>(); } results.values = mList; results.count = mList.size(); return results; } @Override protected void publishResults(CharSequence constraint, FilterResults results) { if (results.count > 0) { notifyDataSetChanged(); } else { notifyDataSetInvalidated(); } } } } }
From:CSDN
全站熱搜
留言列表