我正在尝试让我的AutocompleteTextview返回包含所提供的子字符串的所有结果,但是它只返回带有提供的子字符串的START结果。
当前结果集是
0: "CMPN0004:Gigrig"
1: "CMPN0002:NYDA"
2: "CMPN0003:TEST"
如果输入“CMP”,它会正确执行自动完成,但如果我输入“TEST”或“Gigrig”,它就不会提供任何结果
final AutoCompleteTextView campaignTxt = (AutoCompleteTextView)findViewById(R.id.CampaignTxt);
ArrayAdapter<String> adapter = new ArrayAdapter<String>(TripAddActivity.this,android.R.layout.simple_dropdown_item_1line, campaigns);
答案 0 :(得分:0)
您需要覆盖getFilter
,described here:
您遇到问题,主要是因为您使用的是自定义对象。如果 您将String或int值传递给数组适配器,它知道如何过滤 它。但是如果你传递自定义对象的默认过滤器实现了 不知道如何处理。
虽然目前尚不清楚您在过滤器中尝试做什么i 建议你按照以下步骤。
- 正确实施
ListTO
,虽然它与您现在的目标无关- 实施自定义过滤器
- 返回您的过滤器
醇>实施自定义过滤器
您要做的第一件事就是来自您的
implements
Filterable
数组适配器。其次,提供
的实施Filter
Filter myFilter = new Filter() { @Override protected FilterResults performFiltering(CharSequence constraint) { FilterResults filterResults = new FilterResults(); ArrayList<ListTO> tempList=new ArrayList<ListTO>(); //constraint is the result from text you want to filter against. //objects is your data set you will filter from if(constraint != null && objects!=null) { int length=objects.size(); int i=0; while(i<length){ ListTO item=objects.get(i); //do whatever you wanna do here //adding result set output array tempList.add(item); i++; } //following two lines is very important //as publish result can only take FilterResults objects filterResults.values = tempList; filterResults.count = tempList.size(); } return filterResults; } @SuppressWarnings("unchecked") @Override protected void publishResults(CharSequence contraint, FilterResults results) { objects = (ArrayList<ListTO>) results.values; if (results.count > 0) { notifyDataSetChanged(); } else { notifyDataSetInvalidated(); } } };
最后一步,
@Override public Filter getFilter() { return myFilter; }