Android SearchSuggestSelection 启用查询以开头而不是包含搜索

标签 android search-suggestion

我正在使用 Android SearchRecentSuggestionsProviderSearchable 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 做。

因为实现忽略传入参数,所以没有简单的修复或覆盖。为了避免重复编码,我会:

  1. 从上面的链接复制 SearchRecentSuggestionsProvider 的整个实现。类所做的任何事情都不应是框架私有(private)的,因此应该编译直接副本。
  2. query() 方法中的 args 数组的构造语句修改为 String like = selectionArgs[0] + "%" 而不是 String like = "%"+ selectionArgs[0] + "%"(即删除第一个百分比)
  3. 改为从您的新实现中继承 ProductSearchSuggestionProvider

关于Android SearchSuggestSelection 启用查询以开头而不是包含搜索,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11649194/

相关文章:

elasticsearch - Jest 的完成建议生成器

Solr 建议者重复建议

solr - 如何将 Solr Suggester ContextField 与 boolean 字段一起使用

android - 尝试打开sqlite数据库后,我的android应用程序崩溃

elasticsearch - 在多重搜索查询上使用嵌套短语建议程序

android - 每次更换计算机时,我都需要向 Facebook 应用程序设置添加新的 key 哈希吗?

android - 从浏览器链接启动 android 应用程序

elasticsearch - 弹性建议中的Umlaut

java - 如何在 Android 应用程序中存储用于多个 Activity 的位图

java - 如何从 JSON 中提取图像的 url(LastFM API)