Android SearchSuggestSelectionは、検索を含む代わりにクエリstartswithを有効にします
-
11-12-2019 - |
質問
私はAndroidを使用しています SearchRecentSuggestionsProvider と 検索可能な構成 アプリの検索で以前のものを表示し、提案された応答を制限して、開始するenteriesのみを返すようにしたいですか?(ユーザーが入力しているもの)
現在、"p"は電話、ipod、写真、幸せを返し、私が後にしているのは電話と写真だけです
%のようなSQLにeqlivent何かが、私はそれが動作するように取得するように見えることはできません。
<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="display1LIKE?"
- 私はこれを試してみました:
ここで、{query}は検索クエリです(文字列内の任意の場所に一致する文字がカウントされるように、二つのパーセント記号の間に挟まれています)。選択文字列に渡された値は無視されます(これは、選択文字列で設定している値です)。 searchSuggestSelection
パラメータ)とargs配列(空であるかどうかのチェックを超えて)なので、XMLからできることはあまりありません。
実装は受信パラメータを無視するため、簡単な修正やオーバーライドはありません。重複したコーディングを保存するには、次のようにします:
- の実装全体をコピーする
SearchRecentSuggestionsProvider
上記のリンクから。クラスが行うことは何もframework privateであるべきではないので、直接コピーはコンパイルする必要があります。 - Args配列からの構築文を変更します。args配列の内部で、args文を変更します。
query()
方法は、あるためにString like = selectionArgs[0] + "%"
の代わりにString like = "%" + selectionArgs[0] + "%"
(つまり最初のパーセントを削除します) - サブクラス
ProductSearchSuggestionProvider
代わりにあなたの新しい実装から。
他のヒント
文字列の連結を試みましたか?
word LIKE ? || '%'
.
||
はSQLiteの文字列連結です。
所属していません StackOverflow