我已经在线阅读了有关构建搜索界面和添加自定义建议的所有文档......但我仍然不清楚它是如何工作的。文档说我必须“为您的建议构建一个表(例如在SQLiteDatabase中)并使用必需的列格式化表”。我假设系统最终将自己的相应建议填充此表...但是哪个进程/类负责此操作,实际插入何时发生(在用户进行任何查询之前,查询已经由用户等进行了查询?)
虽然我在这里问一个问题,但如果有人能澄清AutoCompleteTextView
和SearchView
w /自定义建议之间的区别......那就太棒了。与AutoCompleteTextView
(需要对SearchView
,SQLiteDatabase助手类等进行更改等)相比,ContentProvider
似乎很容易实现。
答案 0 :(得分:5)
您必须创建一个内容提供商,该提供商根据迄今为止在搜索视图中输入的查询来提供您的自定义建议。在您的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