您的位置:首页 > 移动开发 > Android开发

Android 系列 6.19 AutoCompleteTextView+SQLite实现自动检索

2017-01-14 11:21 435 查看
6.19
AutoCompleteTextView+SQLite实现自动检索

问题

虽然Android文档包含一个完整的工作示例使用一个ArrayAdapter的AutoCompleteTextView,只是替换一个SimpleCursorAdapter示例不工作。



使用SimpleCursorAdapter而不是ArrayAdapter有两个额外的扭曲:

•您需要告诉适配器在用户选择完成后要使用哪个列填充文本视图。

•您需要根据用户在文本字段中的最新输入,告知适配器如何重新查询。否则,它将显示游标返回的所有行,列表不会缩小以包括实际感兴趣的项目。

讨论

以下示例代码通常位于包含AutoCompleteTextView的活动的onCreate()方法中。它从其活动的布局检索AutoCompleteTextView,创建一个SimpleCursorAdapter,配置SimpleCursorAdapter以使用AutoCompleteTextView,然后将适配器分配给视图。

示例6-26中标记了Android Dev Guide中的ArrayAdapter示例的两个重要区别。它们都在下面的例子中简短的讨论。

实例6-26。 onCreate()代码
final AutoCompleteTextView itemName =
(AutoCompleteTextView) findViewById(R.id.item_name_view);
SimpleCursorAdapter itemNameAdapter = new SimpleCursorAdapter(
this, R.layout.completion_item, itemNameCursor, fromCol, toView);
itemNameAdapter.setStringConversionColumn(
itemNameCursor.getColumnIndexOrThrow(GroceryDBAdapter.ITEM_NAME_COL));
itemNameAdapter.setFilterQueryProvider(new FilterQueryProvider() {
public Cursor runQuery(CharSequence constraint) {
String partialItemName = null;
if (constraint != null) {
partialItemName = constraint.toString();
}
return groceryDb.suggestItemCompletions(partialItemName);
}
});
itemName.setAdapter(itemNameAdapter);


使用ArrayAdapter,不需要指定如何将用户的选择转换为字符串。但是,SimpleCursorAdapter支持在建议的文本中使用一列,在用户选择建议后,文本字段的另一列将被输入文本字段。虽然最常见的情况是使用相同的文本为建议,你在文本字段中选择后,它是不是默认值。默认是用光标的toString()表示填充文本视图 - 类似android.database.sqlite.SQLiteCursor@f00f00d0。

使用ArrayAdapter,系统负责过滤替代项,以显示那些以用户输入到文本字段为止的字符串。

SimpleCursorAdapter更灵活,但是默认行为也没有用。如果无法为适配器编写FilterQueryProvider,则无论用户键入什么类型,AutoCompleteTextView都将显示初始的一组建议。使用FilterQueryProvider,建议按预期工作。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息