【问题标题】:Android SearchSuggestSelection enable query startswith instead of contains searchAndroid SearchSuggestSelection 启用查询以开头而不是包含搜索
【发布时间】:2012-07-25 12:01:11
【问题描述】:

我正在使用 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 '%'?"

【问题讨论】:

  • 你试过android:searchSuggestSelection="word LIKE ?",还是android:searchSuggestSelection="word LIKE '?'"
  • 嗨,埃里克,不幸的是:(

标签: android search-suggestion


【解决方案1】:

如果您正在实施完全自定义的建议提供程序,则在此级别应用自定义将按预期工作。然而,在幕后,SearchRecentSuggestionsProvider 使用以下硬编码参数 (have a look) 查询其本地表:

  • selection = "display1 LIKE ?"
  • selectionArgs = ["%{query}%"]

其中 {query} 是搜索查询(它夹在两个百分号之间,因此任何匹配字符串中任何位置的字符都可以计算在内)。它忽略了为选择字符串(这是您使用 searchSuggestSelection 参数设置的值)和 args 数组(除了检查它是否为空)传入的值,因此您实际上无法从 XML 中做很多事情。

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

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

【讨论】:

    【解决方案2】:

    你尝试过字符串连接吗?

    word LIKE ? || '%'
    

    || 是 SQLite 中的字符串连接。

    【讨论】:

      猜你喜欢
      • 2021-03-11
      • 1970-01-01
      • 2011-12-21
      • 2019-07-01
      • 2011-01-24
      • 2019-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多