android – AutoCompleteTextView过滤问题

android – AutoCompleteTextView过滤问题,第1张

概述我有一个AutoCompleteTextView和一个自定义的AutoCompleteTextView适配器. 我的清单有20个项目,所有项目都包含“vodafone”字符串.当我在AutoCompleteTextView中键入一个字符时,它显示结果,第二个,它不显示列表.例如; <br/>->V<br/>-->AutoComplete DropDown menu appears<br/>-> 我有一个autoCompleteTextVIEw和一个自定义的autoCompleteTextVIEw适配器.

我的清单有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过滤问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1126332.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存