
我的清单有20个项目,所有项目都包含“vodafone”字符串.当我在autoCompleteTextVIEw中键入一个字符时,它显示结果,第二个,它不显示列表.例如;
<br/>->V<br/>-->autoComplete DropDown menu appears<br/>->Vo<br/>-->autoComplete DropDown disappears<br/>->Vod<br/>-->autoComplete DropDown menu appears<br/>->Voda<br/>-->autoComplete DropDown disappears<br/>...etc
为什么会这样?有什么建议?
这是我的适配器:
package listadapters;import java.util.ArrayList;import java.util.Locale;import objects.Item;import utils.Logging;import androID.content.Context;import androID.vIEw.VIEw;import androID.vIEw.VIEwGroup;import androID.Widget.BaseAdapter;import androID.Widget.Filter;import androID.Widget.Filterable;public class autoCompleteTextAdapter2 extends BaseAdapter implements Filterable { Context _context; ArrayList<Item> _items = new ArrayList<Item>(); public autoCompleteTextAdapter2(Context context,ArrayList<Item> items) { _context = context; for (int i = 0; i < items.size(); i++) { _items.add(new Item(items.get(i))); } for (int i = 0; i < _items.size(); i++) { orig.add(new Item(_items.get(i))); } filter = new ItemFilter(); } @OverrIDe public int getCount() { if (_items != null) return _items.size(); else return 0; } @OverrIDe public Object getItem(int arg0) { return _items.get(arg0); } @OverrIDe public long getItemID(int arg0) { return 0; } @OverrIDe public VIEw getVIEw(int arg0,VIEw arg1,VIEwGroup arg2) { VIEw gv; if (arg1 == null){ gv = new VIEw(_context); }else { gv = (VIEw) arg1; } return gv; } @OverrIDe public Filter getFilter() { return filter; } private ItemFilter filter; ArrayList<Item> orig = new ArrayList<Item>(); private class ItemFilter extends Filter { public ItemFilter() { } ArrayList<Item> results = new ArrayList<Item>(); @OverrIDe protected FilterResults performFiltering(CharSequence constraint) { if(constraint != null) Logging.TraceMessage(constraint.toString(),"**","1"); FilterResults oReturn = new FilterResults(); if (orig == null){ for (int i = 0; i < _items.size(); i++) { orig.add(new Item(_items.get(i))); } } if (constraint != null){ results.clear(); if (orig != null && orig.size() > 0) { for (Item i : orig) { if (i._itemname.tolowerCase(Locale.US).contains(constraint.toString().tolowerCase(Locale.US))){ results.add(new Item(i)); } } } Logging.TraceMessage(String.valueOf(results.size()),"2"); oReturn.values = results; } return oReturn; } @SuppressWarnings("unchecked") @OverrIDe protected voID publishResults(CharSequence constraint,FilterResults results) { _items.clear(); for(int i = 0; i < ((ArrayList<Item>)results.values).size(); i++){ _items.add(new Item(((ArrayList<Item>)results.values).get(i))); } notifyDataSetChanged(); }} } 并设置适配器代码:
autoCompleteTextAdapter2 adapter = new autoCompleteTextAdapter2(myAct,GlobalVariables.currcategoryItems);yeniMarkaModel.setAdapter(adapter);解决方法 在返回结果之前,必须将筛选的项目数分配给FilterResults.count.文本控件为下拉列表分配了这么多行.
原因是autoCompleteTextVIEw从不直接使用values字段,而是要求您的Adapter获取具有特定索引的项目.例如,这使得可以始终将整个项集合传递给值,但只返回其中一些来自Adapter.getItem().
总结以上是内存溢出为你收集整理的android – AutoCompleteTextView过滤问题全部内容,希望文章能够帮你解决android – AutoCompleteTextView过滤问题所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)