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;
}
}
}
转载于:https://my.oschina.net/u/698243/blog/152404