package com.example.autocompletetextviewtest; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import android.os.Bundle; import android.app.Activity; import android.util.Log; import android.view.LayoutInflater; import android.view.Menu; 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 MainActivity extends Activity { private ArrayList<String> mCountries = new ArrayList<String>(); private List<String> mFilterData; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); initData(); setContentView(R.layout.activity_main); AutoCompleteTextView autoTxt = (AutoCompleteTextView) findViewById(R.id.auto_txt); autoTxt.setAdapter(new MyAdapter()); } private void initData() { List<String> list = Arrays.asList(getResources().getStringArray(R.array.tag)); mCountries.addAll(list); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.main, menu); return true; } public class MyAdapter extends BaseAdapter implements Filterable { @Override public int getCount() { return mFilterData.size(); } @Override public Object getItem(int position) { return mFilterData.get(position); } @Override public long getItemId(int position) { return position; } @Override public View getView(int position, View convertView, ViewGroup parent) { ViewHolder holder = null; if (convertView == null) { holder = new ViewHolder(); LayoutInflater inflater = LayoutInflater.from(MainActivity.this); convertView = inflater.inflate(R.layout.simple_list_item_for_autocomplete, null); holder.tv = (TextView) convertView.findViewById(R.id.simple_item_0); convertView.setTag(holder); } else { holder = (ViewHolder) convertView.getTag(); } holder.tv.setText(mFilterData.get(position)); return convertView; } @Override public Filter getFilter() { return new Filter() { @Override protected FilterResults performFiltering(CharSequence constraint) { Log.d("AutoCompleteTest", String.format("prefix = %s", constraint)); FilterResults result = new FilterResults(); ArrayList<String> newData = new ArrayList<String>(); int size = mCountries.size(); for (int i = 0; i < size; i++) { String item = mCountries.get(i); if (item.contains(constraint)) { newData.add(item); } } result.values = newData; result.count = newData.size(); return result; } @Override protected void publishResults(CharSequence constraint, FilterResults results) { mFilterData = (List<String>) results.values; if (results.count > 0) { notifyDataSetChanged(); } else { notifyDataSetInvalidated(); } } }; } class ViewHolder { TextView tv; } } }