2012-07-25 42 views
0

当我在EditText上键入a时,我想让addacer,...显示在下拉菜单中。我知道它可以完成AutoCompleteTextView。但我想它也显示bat,cat ...,字符串a是在一个字,不在前面。Android AutoCompleteTextView

+0

你尝试一些东西是一回事吗?如果是,请在这里发布你的代码... – 2012-07-25 03:10:28

回答

0

看起来你必须实现你自己的Filter类。然后你必须实现一个ListAdapter(包装你的字符串列表),它也实现了Filterable接口;这个子类在getFilter被调用时应该返回你的自定义Filter。您可以通过setAdapter()方法将自定义的ListAdapter/Filterable传递给AutoCompleteTextView。 (一个简单的方法来做到这一切是继承Android的ArrayAdapter。)

这里的source code为一个ArrayAdapter。找到ArrayFilter的定义(在底部)并根据需要进行修改。以下代码是您可能正在寻找的修改的ArrayFilter。在应用到您自己的适配器子类之前,您必须研究mLock,mObjects和的影响。

private class ArrayFilter extends Filter { 
    @Override 
    protected FilterResults performFiltering(CharSequence prefix) { 
     FilterResults results = new FilterResults(); 

     if (mOriginalValues == null) { 
      synchronized (mLock) { 
       mOriginalValues = new ArrayList<T>(mObjects); 
      } 
     } 

     if (prefix == null || prefix.length() == 0) { 
      ArrayList<T> list; 
      synchronized (mLock) { 
       list = new ArrayList<T>(mOriginalValues); 
      } 
      results.values = list; 
      results.count = list.size(); 
     } else { 
      String prefixString = prefix.toString().toLowerCase(); 

      ArrayList<T> values; 
      synchronized (mLock) { 
       values = new ArrayList<T>(mOriginalValues); 
      } 

      final int count = values.size(); 
      final ArrayList<T> newValues = new ArrayList<T>(); 
      for (int i = 0; i < count; i++) { 
       final T value = values.get(i); 
       final String valueText = value.toString().toLowerCase(); 

       if (valueText.contains(prefixString)) { 
        newValues.add(value); 
       } 
      } 

      results.values = newValues; 
      results.count = newValues.size(); 
     } 

     return results; 
    } 

    @Override 
    protected void publishResults(CharSequence constraint, FilterResults results) { 
     //noinspection unchecked 
     mObjects = (List<T>) results.values; 
     if (results.count > 0) { 
      notifyDataSetChanged(); 
     } else { 
      notifyDataSetInvalidated(); 
     } 
    } 
} 
1

Here是你在找什么..