我在代码中使用 AutoCompleteTextView 并使用 SimpleCursorAdapter 从数据库加载列表。
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);
它正确填充列表,但我有两个问题:
- 我希望对这个列表进行排序
- 无论我输入什么,它都会显示完整的列表。我希望它根据列表中的匹配模式进行过滤。例如如果列表包含值“页面”、“工具”...那么如果我在框中输入 T,下拉列表应仅显示“工具”。这个想法是显示包含字符串文本中任意位置输入的模式的选项。
如何才能做到这一点?
您必须告诉适配器要显示哪些项目。我尝试通过使用来实现类似的东西FilterQueryProvider http://developer.android.com/reference/android/widget/FilterQueryProvider.html查询数据库中我想要在下拉列表中显示的项目。
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);
至于当你在列表中选择一个项目时的情况,你必须覆盖CursorToStringConverter http://developer.android.com/reference/android/widget/SimpleCursorAdapter.CursorToStringConverter.html of the SimpleCursorAdapter
。就像是:
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);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)