Android SearchSuggestSelection Abilita query StartSwith invece di contiene la ricerca
-
11-12-2019 - |
Domanda
Sto usando l'Android searchrecentsuggestionsprovider e Configurazione ricercabile per visualizzare Precedente in Ricerca APP e vorresti limitareLe risposte suggerite per restituire solo enteries che iniziano?(Cosa sta digitando l'utente)
Attualmente "P" restituisce telefono, iPod, foto, felice e quello che sto cercando è solo telefono e foto
Qualcosa di eqlivent a SQL come% ma non riesco a farlo capire.
<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>
.
Provato:
android:searchSuggestSelection="WORD LIKE '%'?"
. Soluzione
Se stavi implementando un fornitore di suggerimenti completamente personalizzati, applicare le personalizzazioni a questo livello funzionerebbero come previsto. Tuttavia, sotto le coperte, SearchRecentsuGestionsProvider interrogano la sua tabella locale con i seguenti argomenti rigidi ( Dai un'occhiata ):
- .
- Selezione="Display1 piace?"
- selezioneArgs= ["% {query}%"]
Dove {query} è la query di ricerca (è sandwich tra due segni percentuali in modo che qualsiasi carattere corrisponda in qualsiasi punto dei conteggi delle stringhe). Ignora il valore passato per la stringa di selezione (che è ciò che si imposta con il parametro
searchSuggestSelection
) e l'array ARGS (oltre a verificare se è vuoto), quindi non c'è molto molto che puoi fare da XML. .Poiché l'implementazione ignora i parametri in arrivo, non vi è alcuna correzione o override facile. Per salvare te stesso la codifica duplicata, vorrei:
- .
- Copia l'intera implementazione di
SearchRecentSuggestionsProvider
dal link sopra. Niente che la classe dovrebbe essere strutturata privata, quindi una copia diretta dovrebbe compilare. - Modifica l'istruzione Construction dall'array ARGS, all'interno del metodo
query()
, per essereString like = selectionArgs[0] + "%"
anzichéString like = "%" + selectionArgs[0] + "%"
(I.e. Rimuovere il primo percento) - sottoclasse
ProductSearchSuggestionProvider
dalla tua nuova implementazione invece.
- Copia l'intera implementazione di
Altri suggerimenti
Hai provato la concatenazione delle stringhe?
word LIKE ? || '%'
.
||
è concatenazione delle stringhe in SQLite.