我的应用程序中有这样的Vector:
Vector<Firm> firmVector= new Vector<Firm>();
如您所见,这是我自己的班级Firm
所以对于我的问题,是否可以在此向量中添加AutoComplete
?
喜欢这个,来自developer.android.com:
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
AutoCompleteTextView textView = (AutoCompleteTextView)findViewById(R.id.autocomplete_country);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.list_item, COUNTRIES);
textView.setAdapter(adapter);
}
答案 0 :(得分:1)
是的,你可以通过实现ArrayAdapter来实现,但是你需要实现getFilter()
使用的AutoCompleteTextView
。类似的东西可能有用:
private class FirmAdapter extends ArrayAdapter<Firm> {
private Filter filter;
@Override
public Filter getFilter()
{
if(filter == null){
filter = new Filter(){
int lastlen = 0;
boolean initialized = false;
@SuppressWarnings("unchecked")
@Override
protected void publishResults(CharSequence constraint, FilterResults results)
{
filteredItems = (List<Firm>)results.values;
ArrayAdapter.this.notifyDataSetChanged();
}
@Override
protected FilterResults performFiltering(CharSequence constraint)
{
FilterResults results = new FilterResults();
if(constraint == null || constraint.length() == 0){
results.values = null;
}else{
String val;
Firm obj;
constraint = constraint.toString().toUpperCase();
int newlen = constraint.length();
LinkedList<Firm> filteredResults = new LinkedList<Firm>();
if(newlen < lastlen){
int i = 0, size = ArrayAdapter.super.getCount();
for(i=0;i<size;i++){
obj = ArrayAdapter.super.getItem(i);
val = obj.toString(); // CUSTOMIZE THIS
if(val.contains(constraint)) filteredResults.add(obj);
}
}else{
int i = 0, size = getCount();
for(i=0;i<size;i++){
obj = getItem(i);
val = obj.toString(); // CUSTOMIZE THIS
if(val.contains(constraint)) filteredResults.add(obj);
}
}
lastlen = newlen;
results.values = filteredResults;
}
return results;
}
};
}
return filter;
}
}
}
我从我拥有的项目中删除了这个,所以它需要一些测试和清理才能工作(在我的情况下,我在一组JSONObject
实例上有一个过滤器,你有一个{{1但是尝试类似的东西。 Firm
的注释是您希望根据CUSTOMIZE THIS
的输入实际执行测试的位置。