2012-03-10 65 views
2

在Android中AutoCompleteTextView只能說明顯示下拉當我們進入第一個字母正確。什麼我想要的是,當我可以在字符串中輸入任何字母序列應該表現出下降down.for例如「一月」是我的數組所以當我在AutoComplete字段中輸入「anu」時,它應該在下拉菜單中顯示「1月」。請幫助。 謝謝AutoCompleteTextView android系統

+0

我做類似的東西在這裏! http://stackoverflow.com/questions/12854336/autocompletetextview-backed-by-cursorloader – toobsco42 2012-10-29 20:05:46

回答

1

您可能會寫自己的Filter並通過TextWatcher附加它。這種反應在一個AutoCompleteTextView的正則表達式的例子:Android AutoCompleteTextView with Regular Expression?,這裏是另一個正則表達式/ Java示例:How can I perform a partial match with java.util.regex.*?

編輯:您將需要爲了延長ArrayAdapter覆蓋用getFilter(),並返回您的自定義過濾器。

那麼你將有這樣的事情:

autoCompleteTextView.setAdapter(arrayAdapter); 
autoCompleteTextView.addTextChangedListener(new TextWatcher() { 
    public void onTextChanged(CharSequence s, int start, int before, int count) { 
     arrayAdapter.getFilter().filter(s); 
    } 
}); 

public class RegexFilter extends Filter{ 

    ArrayAdapter<String> mAdapter; 
    public RegexFilter(ArrayAdapter<String> adapter) { 
     mAdapter = adapter; 
    } 
... 
    @Override 
    protected FilterResults performFiltering(CharSequence constraint) { 
     Pattern p = Pattern.compile(constraint); 
     Matcher m = p.matcher(""); 
     List listOfMatches = new ArrayList<String>(); 
     for (String curMonth : months) { 
     m.reset(curMonth); 
     if (m.matches || m.hitEnd()) { 
      listOfMatches.add(curMonth); 
     } 
     } 
     FilterResults results = new FilterResults(); 
     results.values = listOfMatches; 
     results.count = listOfMatches.size(); 
     return results; 
    } 

    @Override 
    protected void publishResults(CharSequence constraint, FilterResults results) { 
     mAdapter.addAll(results.values); 
     mAdapter.notifyDataSetChanged(); 
    } 
} 

public class PartialArrayAdapter extends ArrayAdapter<String> { 
    ... 
    RegexFilter mFilter; 
    @Override 
    public TimedSuggestionFilter getFilter() { 
     if(null == mFilter) 
     mFilter = new RegexFilter(this); 
     return mFilter; 
    } 
+0

很抱歉,但我不能夠找到使用setfilter(),並用getFilter()在AutoCompleteTextView Class.my Android的API級別的功能是8 – pyus13 2012-03-10 22:31:02

+0

@ pyus13編輯的我的代碼。對不起,getFilter()函數在ArrayAdapter中。我建議做一個ArrayAdapter示例(可能是這樣的:http://sudarmuthu.com/blog/using-arrayadapter-and-listview-in-android-applications)。適配器是Android的重要組成部分... – 2012-03-11 02:59:45