Android SearchSuggestSelection aktiviert die Abfrage „Startswith“ statt „Contains“.

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

  •  11-12-2019
  •  | 
  •  

Frage

Ich verwende das Android SearchRecentSuggestionsProvider Und Durchsuchbare Konfiguration , um vorherige in App-Suchen anzuzeigen, und möchten Sie die vorgeschlagenen Antworten darauf beschränken, nur Eingaben zurückzugeben, die mit ? beginnen?(was der Benutzer eingibt)

Derzeit gibt „p“ „Telefon“, „iPod“, „Foto“ und „Happy“ zurück, und ich suche nur nach Telefon und Foto

Etwas Äquivalentes zu SQL wie % aber ich kriege das scheinbar nicht hin.

<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>

Versucht:

android:searchSuggestSelection="WORD LIKE '%'?"
War es hilfreich?

Lösung

Wenn Sie einen vollständig benutzerdefinierten Vorschlagsanbieter implementieren würden, würde die Anwendung von Anpassungen auf dieser Ebene wie erwartet funktionieren.Unter der Decke fragt SearchRecentSuggestionsProvider jedoch seine lokale Tabelle mit den folgenden fest codierten Argumenten ab (Guck mal):

  • Auswahl = "display1 LIKE ?"
  • SelectionArgs = ["%{query}%"]

Dabei ist {Abfrage} die Suchabfrage (sie ist zwischen zwei Prozentzeichen eingeklemmt, sodass jedes Zeichen zählt, das an einer beliebigen Stelle in der Zeichenfolge übereinstimmt).Es ignoriert den für die Auswahlzeichenfolge übergebenen Wert (den Sie mit festlegen). searchSuggestSelection Parameter) und das args-Array (abgesehen von der Prüfung, ob es leer ist), sodass Sie mit XML wirklich nicht viel machen können.

Da die Implementierung eingehende Parameter ignoriert, gibt es keine einfache Lösung oder Überschreibung.Um sich doppelte Codierung zu ersparen, würde ich:

  1. Kopieren Sie die gesamte Implementierung von SearchRecentSuggestionsProvider über den Link oben.Nichts, was die Klasse tut, sollte Framework-privat sein, daher sollte eine direkte Kopie kompiliert werden.
  2. Ändern Sie die Konstruktionsanweisung aus dem args-Array innerhalb von query() Methode, sein String like = selectionArgs[0] + "%" anstatt String like = "%" + selectionArgs[0] + "%" (d. h.das erste Prozent entfernen)
  3. Unterklasse ProductSearchSuggestionProvider stattdessen aus Ihrer neuen Implementierung.

Andere Tipps

Haben Sie eine String-Verkettung ausprobiert? generasacodicetagpre.

|| ist eine String-Verkettung in SQLite.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top