2012-11-14 12 views
9

Sto facendo delle ricerche su ContentProvider e sulle configurazioni disponibili per la ricerca. Ho creato una classe che estende un fornitore di contenuti con un database che fornisce suggerimenti da un database mentre l'utente digita. Questo utilizza il paradigma di Search Manager (non un SearchView).Come avviare i suggerimenti immediatamente su Android ricercabili prima ancora che l'utente abbia iniziato a digitare

Fino a questo punto, tutto funziona alla grande.

Quello che mi piacerebbe fare e sto avendo problemi è quello di visualizzare alcuni suggerimenti prima l'utente inizia a digitare, dopo aver avviato la ricerca. Impostando la proprietà 'android: searchSuggestThreshold = "0"' nel searchable.xml funziona solo se l'utente tocca effettivamente la casella di testo di ricerca dopo averla lanciata - Vorrei visualizzare i suggerimenti immediatamente dopo la ricerca è stata lanciata (cioè non aspettare l'utente a fare qualsiasi altra cosa).

Qualche idea?

Modifica: un esempio di ciò di cui sto parlando è la funzionalità di ricerca nell'app Google Play Store: quando un utente tocca la lente di ingrandimento per la ricerca, viene immediatamente visualizzato un elenco di suggerimenti recenti.

risposta

3

Bene, dopo aver trascorso molte ore su questo ho finalmente trovato un modo per ottenere ciò di cui avevo bisogno. Ecco la risposta in modo forse meno altri sviluppatori soffrono:

SearchView per la modalità di ricerca ha un listener di testo modificato e solo quando il testo cambia, viene attivata una richiesta di suggerimenti. Ovviamente, per lo stato iniziale nulla è cambiato, quindi non richiede suggerimenti attraverso la funzione query().

Al fine di "ingannare" il SearchView a pensare il testo è cambiato, è possibile effettuare le seguenti operazioni:

@Override 
public boolean onSearchRequested() 
{ 
    final SearchManager searchManager = (SearchManager) getSystemService(SEARCH_SERVICE);  

    searchManager.startSearch(" ", true, getComponentName(), null, false); 

    return super.onSearchRequested(); 
} 
Problemi correlati