Android SearchSuggestSelection启用查询startswith而不是包含搜索
-
11-12-2019 - |
题
我正在使用Android 搜索者,搜索者 和 可搜索配置 要在应用程序搜索中显示以前的内容,并希望将建议的响应限制为仅返回以开头的输入?(用户正在输入的内容)
目前"p"返回电话,ipod,照片,快乐,而我所追求的只是电话和照片
一些EQLIVENT到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使用以下硬编码参数查询其本地表(看看):
- selection="display1喜欢?"
- 选择目标=["%{查询}%"]
其中{query}是搜索查询(它夹在两个百分比符号之间,以便任何字符匹配字符串中的任何位置计数)。它忽略为选择字符串传递的值(这是您使用 searchSuggestSelection
参数)和args数组(除了检查它是否为空),所以你真的没有多少可以从XML做。
由于实现忽略传入参数,因此没有简单的修复或复盖。为了节省自己重复的编码,我会:
- 复制的整个实现
SearchRecentSuggestionsProvider
从上面的链接。类所做的任何事情都不应该是框架私有的,所以直接副本应该编译。 - 修改args数组中的构造语句,在
query()
方法,要String like = selectionArgs[0] + "%"
而不是String like = "%" + selectionArgs[0] + "%"
(即去除第一个百分比) - 子类
ProductSearchSuggestionProvider
而不是从你的新实现。
其他提示
你试过字符串连接吗?
word LIKE ? || '%'
.
||
是sqlite中的字符串连接。
不隶属于 StackOverflow