2013-07-14 35 views
0

我想過濾autocompletetextview中的文本。當我開始輸入文本而不是顯示過濾的文本時,它顯示文本的完整列表。我的意思是它不會過濾列表。AutoCompleteTextView總是顯示完整列表而不是過濾

請幫我解決這個問題。我試過但無法識別問題

public class AutoCompleteAdapter extends ArrayAdapter<String> implements Filterable { 
    private ArrayList<String> mData; 

    public AutoCompleteAdapter(Context context, int textViewResourceId) { 
     super(context, textViewResourceId); 
     mData = new ArrayList<String>(); 
     mData.add("one"); 
     mData.add("oneee"); 
     mData.add("two"); 
    } 

    @Override 
    public int getCount() { 
     return mData.size(); 
    } 

    @Override 
    public String getItem(int index) { 
     return mData.get(index); 
    } 

    @Override 
    public Filter getFilter() { 
     Filter myFilter = new Filter() { 
      @Override 
      protected FilterResults performFiltering(CharSequence constraint) { 
       List<String> resultsSuggestions = new ArrayList<String>(); 
       if(constraint != null) { 
        for (int i = 0; i < getCount(); i++) { 
         if(getItem(i).toString().startsWith(constraint.toString())){ 
          resultsSuggestions.add(getItem(i).toString()); 
         } 
        } 
       } 
       FilterResults results = new FilterResults(); 
       results.values = resultsSuggestions; 
       results.count = resultsSuggestions.size(); 
       return results; 
      } 

      @SuppressWarnings("unchecked") 
      @Override 
      protected void publishResults(CharSequence contraint, FilterResults results) { 
       try { 
        ArrayList<String> newValues = (ArrayList<String>) results.values; 
        for (int i = 0; i < newValues.size(); i++) { 
         add(newValues.get(i)); 
        } 

        if(results != null && results.count > 0) { 
         notifyDataSetChanged(); 
        } 
        else { 
         notifyDataSetInvalidated(); 
        } 
       } catch(Exception e) { 
        Log.v("Near ATM", "Exception ::" + e.getMessage()); 
       } 
      } 
     }; 
     return myFilter; 
    } 
} 
+0

任何specicic理由延長ArrayAdapter? – pskink

+0

不,這是否會造成問題。如果我不使用它,那麼我怎麼刷新它 – user2580525

+0

刷新什麼?我不明白... – pskink

回答

0

我會說你的問題是在publishResults方法。即使是result.count == 0,也應該撥打notifyDataSetChanged()。您的getItemgetCount方法應該使用過濾列表。所以,你的代碼應該是這樣的:

public class AutoCompleteAdapter extends ArrayAdapter<String> implements Filterable { 
private ArrayList<String> fullList; 
private ArrayList<String> filtredList; 

public AutoCompleteAdapter(Context context, int textViewResourceId) { 
    super(context, textViewResourceId); 
    filtredList = new ArrayList<String>(); 
    fullList = new ArrayList<String>(); 
    fullList.add("one"); 
    fullList.add("oneee"); 
    fullList.add("two"); 
} 

@Override 
public int getCount() { 
    return filtredList.size(); 
} 

@Override 
public String getItem(int index) { 
    return filtredList.get(index); 
} 

@Override 
public Filter getFilter() { 
    Filter myFilter = new Filter() { 
     @Override 
     protected FilterResults performFiltering(CharSequence constraint) { 
      List<String> resultsSuggestions = new ArrayList<String>(); 
      if(constraint != null) { 
       for (int i = 0; i < fullList.size(); i++) { 
        if(fullList.get(i).startsWith(constraint.toString())){ 
         resultsSuggestions.add(fullList.get(i)); 
        } 
       } 
      } 
      FilterResults results = new FilterResults(); 
      results.values = resultsSuggestions; 
      results.count = resultsSuggestions.size(); 
      filtredList = resultsSuggestions; 
      return results; 
     } 

     @SuppressWarnings("unchecked") 
     @Override 
     protected void publishResults(CharSequence contraint, FilterResults results) { 
      try { 
       ArrayList<String> newValues = (ArrayList<String>) results.values; 
       for (int i = 0; i < newValues.size(); i++) { 
        add(newValues.get(i)); 
       } 

       if(results != null) { 
        notifyDataSetChanged(); 
       } 
       else { 
        notifyDataSetInvalidated(); 
       } 
      } catch(Exception e) { 
       Log.v("Near ATM", "Exception ::" + e.getMessage()); 
      } 
     } 
    }; 
    return myFilter; 
} 

}

+0

No..nothing changes.still同樣的問題 – user2580525

+0

我編輯了我的答案。 – koso

+0

好的..檢查。 – user2580525

相關問題