2011-04-16 41 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")); 
相关问题