我已经在线阅读了有关构建搜索界面和添加自定义建议的所有文档……但我仍然不清楚它是如何工作的.文档说我必须“为您的建议构建一个表(例如在sqlite
Database中)并使用必需的列格式化表”.我假设系统最终将自己的相应建议填充此表…但是哪个进程/类负责这个,以及何时会发生实际插入(在用户进行任何查询之前,查询已由用户等进行)?
虽然我在这里问一个问题,但是如果有人能够澄清AutoCompleteTextView和带有自定义建议的SearchView之间的区别……那就太棒了.与SearchView(需要对ContentProvider,sqliteDatabase帮助程序类等进行更改)相比,AutoCompleteTextView看起来很容易实现.
解决方法
您必须创建一个内容提供商,该提供商根据迄今为止在搜索视图中输入的查询来提供您的自定义建议.在您的searchable.xml中,您可以配置搜索表达式的最小长度,在询问建议之前必须达到该长度.此内容提供程序称为建议提供程序(它仍然扩展ContentProvider).内容提供程序的权限也在searchable.xml中配置.
建议提供者如何计算其建议没有限制.您可以搜索Web查询数据库或读取文件.但查询的答案是表格格式.如果直接从数据库查询建议,则可以使用数据库查询应答的游标在内容提供程序的query()方法中提供结果.如果结果是从一个或多个源计算的,则可以使用MatrixCursor动态创建表.
搜索机制使用来自建议提供者的答案行来显示建议,它们存储在表格中.行的格式如下:
private static final String[] COLUMNS = { "_id",SearchManager.SUGGEST_COLUMN_ICON_1,// ID of a drawable (icon) as String SearchManager.SUGGEST_COLUMN_TEXT_1,// main text for suggestion display SearchManager.SUGGEST_COLUMN_TEXT_2,// secondary text for suggestion display SearchManager.SUGGEST_COLUMN_INTENT_DATA,// this could be an URI to access the suggestion as used in an intent with a VIEW action SearchManager.SUGGEST_COLUMN_INTENT_ACTION,// this could be Intent.ACTION_VIEW SearchManager.SUGGEST_COLUMN_SHORTCUT_ID // e.g. SearchManager.SUGGEST_NEVER_MAKE_SHORTCUT };
此处更详细地描述了搜索:http://developer.android.com/guide/topics/search/index.html