我正在使用 Android SearchRecentSuggestionsProvider和 Searchable Configuration显示以前的应用程序搜索,并希望将建议的响应限制为仅返回以?开头的条目。 (用户输入的内容)
目前“p”返回phone,ipod,photo,happy,而我要的只是phone和photo
类似 % 的 SQL 等价物,但我似乎无法让它工作。
<searchable xmlns:android="http://schemas.android.com/apk/res/android"
android:hint="@string/product_search_hint"
android:imeOptions="actionSearch"
android:label="@string/app_label"
android:searchSuggestAuthority="com.myapp.ProductSearchSuggestionProvider"
android:searchSuggestSelection="word MATCH ?" >
</searchable>
尝试过:
android:searchSuggestSelection="WORD LIKE '%'?"
最佳答案
如果您正在实现完全自定义的建议提供程序,那么在此级别应用自定义将按预期工作。但是,在幕后,SearchRecentSuggestionsProvider 使用以下硬编码参数 (have a look) 查询其本地表:
- selection = "display1 LIKE ?"
- selectionArgs = ["%{query}%"]
其中 {query} 是搜索查询(它夹在两个百分号之间,以便任何字符匹配字符串中的任何位置都算在内)。它忽略了为选择字符串传入的值(这是您使用 searchSuggestSelection
参数设置的值)和 args 数组(除了检查它是否为空),所以您实际上没有太多可以从 XML 做。
因为实现忽略传入参数,所以没有简单的修复或覆盖。为了避免重复编码,我会:
- 从上面的链接复制
SearchRecentSuggestionsProvider
的整个实现。类所做的任何事情都不应是框架私有(private)的,因此应该编译直接副本。 - 将
query()
方法中的 args 数组的构造语句修改为String like = selectionArgs[0] + "%"
而不是String like = "%"+ selectionArgs[0] + "%"
(即删除第一个百分比) - 改为从您的新实现中继承
ProductSearchSuggestionProvider
。
关于Android SearchSuggestSelection 启用查询以开头而不是包含搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11649194/