2011-04-16 50 views
2

我在我的代碼中使用AutoCompleteTextView並使用SimpleCursorAdapter從數據庫加載列表。android autocompletetextview應該只顯示下拉相關的選項

AutoCompleteTextView cocktailIngredientView = (AutoCompleteTextView) findViewById(R.id.item); 
SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
       android.R.layout.simple_spinner_item, mCursor, 
       new String[] { "field" }, 
       new int[] { android.R.id.text1 }); 
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); 
cocktailIngredientView.setAdapter(adapter); 
cocktailIngredientView.setThreshold(0); 

它正確地填充列表,但我有兩個問題:1。 我想這個列表進行排序 2.不管我進入,它顯示的完整列表。我希望它根據列表中的匹配模式進行過濾。例如如果列表包含值Page,Tools ...,那麼如果我在框中輸入T,下拉菜單應該只顯示工具。這個想法是在字符串文本的任何位置顯示包含輸入模式的選項。

這怎麼辦?請幫忙。

問候, 薩班

+0

此外,當我選擇在下拉菜單中的任何項目下來就說明android.database.sqlite ... – Sapan 2011-04-16 09:53:43

回答

4

你必須告訴適配器顯示哪些項目。我嘗試使用FilterQueryProvider來實現類似於此的操作,該操作用於向數據庫查詢我想要在下拉菜單中顯示的項目。

FilterQueryProvider filter = new FilterQueryProvider() { 

    @Override 
    public Cursor runQuery(CharSequence constraint) { 
     // Make a DB query that filters based on the constraint 

     return //whatever query results; 
    } 
}; 
myAdapter.setFilterQueryProvider(filter); 

對於這種情況,當你在列表中選擇一個項目,你必須覆蓋SimpleCursorAdapterCursorToStringConverter。喜歡的東西:

SimpleCursorAdapter.CursorToStringConverter conv = new SimpleCursorAdapter.CursorToStringConverter() { 

    @Override 
    public CharSequence convertToString(Cursor cursor) { 
     int numCol = cursor.getColumnIndexOrThrow("whateverFieldYouNeed"); 
     String term = cursor.getString(numCol); 
     return term; 
    } 
}; 
myAdapter.setCursorToStringConverter(conv); 
+0

感謝您的回答。它真的爲我工作。但使用filterquery提供程序,我觀察到的一件事是過濾列表中的最後一項不會完全顯示。我看到一個滾動條,並且要完整地查看它,我必須向下滾動。它默認只顯示一半。 – Sapan 2011-04-21 08:20:45

+0

嘗試使用'setDropDownHeight()'[1]方法來調整下拉菜單中可見項的數量。 [1] http://developer.android.com/reference/android/widget/AutoCompleteTextView.html#setDropDownHeight(int) – Zarah 2011-04-21 18:18:09

0

取而代之的是CursorToStringConverter的,你也可以使用

mAdapter.setStringConversionColumn(mCursor.getColumnIndexOrThrow("whateverFieldYouNeed")); 
相關問題