2

AndroidSearchRecentSuggestionsProviderSearchableConfigurationを使用して、以前のアプリ検索を表示していますが、提案された応答を、?で始まるエントリのみを返すように制限したいと思います。(ユーザーが入力しているもの)

現在、「p」は電話、iPod、写真、ハッピーを返します。私が求めているのは電話と写真だけです。

%のような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 '%'?"
4

2 に答える 2

1

完全にカスタムの提案プロバイダーを実装している場合、このレベルでカスタマイズを適用すると、期待どおりに機能します。ただし、内部では、SearchRecentSuggestionsProviderは、次のハードコードされた引数を使用してローカルテーブルにクエリを実行します(参照してください)。

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

ここで、{query}は検索クエリです(文字列内の任意の文字が一致するように、2つのパーセント記号で囲まれています)。選択文字列(searchSuggestSelectionパラメーターで設定しているもの)とargs配列(空かどうかのチェック以外)に渡された値は無視されるため、XMLからできることはほとんどありません。

実装は着信パラメータを無視するため、簡単な修正やオーバーライドはありません。重複するコーディングを省くために、私は次のようにします。

  1. SearchRecentSuggestionsProvider上記のリンクからの実装全体をコピーします。クラスが行うことはフレームワークプライベートであってはならないので、直接コピーをコンパイルする必要があります。
  2. query()メソッド内のargs配列から、String like = selectionArgs[0] + "%"代わりになるように構築ステートメントを変更しますString like = "%" + selectionArgs[0] + "%"(つまり、最初のパーセントを削除します)
  3. ProductSearchSuggestionProvider代わりに、新しい実装のサブクラス。
于 2012-08-13T17:59:19.310 に答える
0

文字列の連結を試しましたか?

word LIKE ? || '%'

||SQLiteの文字列連結です。

于 2012-08-13T17:02:59.427 に答える