Android SearchSuggestSelection Abilita query StartSwith invece di contiene la ricerca

StackOverflow https://stackoverflow.com//questions/11649194

  •  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 '%'?"
.

È stato utile?

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:

      .
    1. Copia l'intera implementazione di SearchRecentSuggestionsProvider dal link sopra. Niente che la classe dovrebbe essere strutturata privata, quindi una copia diretta dovrebbe compilare.
    2. Modifica l'istruzione Construction dall'array ARGS, all'interno del metodo query(), per essere String like = selectionArgs[0] + "%" anziché String like = "%" + selectionArgs[0] + "%" (I.e. Rimuovere il primo percento)
    3. sottoclasse ProductSearchSuggestionProvider dalla tua nuova implementazione invece.

Altri suggerimenti

Hai provato la concatenazione delle stringhe?

word LIKE ? || '%'
.

|| è concatenazione delle stringhe in SQLite.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top