2012-07-25 62 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是你在找什麼..