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

117 篇文章 4 订阅
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,建议按预期工作。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值