2012-01-29 12 views
6

Ho letto tutta la documentazione online sulla creazione di interfacce di ricerca e l'aggiunta di suggerimenti personalizzati ... ma non sono ancora chiaro come funzioni. La documentazione dice che devo "Costruire una tabella (come in un SQLiteDatabase) per i tuoi suggerimenti e formattare la tabella con le colonne richieste". Suppongo che il sistema finirà per riempire questa tabella con i suggerimenti appropriati da solo ... ma quale processo/classe è responsabile per questo, e quando si verificheranno gli inserimenti effettivi (prima che qualsiasi query sia fatta dall'utente, dopo un la query è stata fatta dall'utente, ecc.)?SearchManager - aggiunta di suggerimenti personalizzati

E mentre sto facendo una domanda quassù, se qualcuno potesse chiarire la differenza tra un AutoCompleteTextView e un SearchView con suggerimenti personalizzati ... sarebbe fantastico. AutoCompleteTextView sembra molto semplice da implementare rispetto allo SearchView (che richiede modifiche da apportare allo ContentProvider, classe helper SQLiteDatabase, ecc.).

risposta

5

È necessario creare un fornitore di contenuti che fornisca i suggerimenti personalizzati in base a una query immessa finora nella vista di ricerca. Nel tuo searchable.xml si configura la lunghezza minima dell'espressione di ricerca, che deve essere raggiunta prima di chiedere suggerimenti. Questo fornitore di contenuti è chiamato provider di suggerimenti (estende ancora ContentProvider). L'autorizzazione del provider del contenuto è anche configurata in searchable.xml.

Non ci sono limiti su come il fornitore di suggerimenti calcola i suoi suggerimenti. È possibile cercare nel Web eseguire una query su un database o leggere un file. Ma la risposta alla domanda è nel formato di una tabella. Se i suggerimenti vengono interrogati direttamente da un database, è possibile utilizzare il cursore risposto dalla query del database per fornire il risultato nel metodo query() del provider di contenuti. Se il risultato è calcolato da una o più fonti, puoi creare una tabella al volo usando MatrixCursor.

Le righe della risposta del provider di suggerimenti vengono utilizzate dal meccanismo di ricerca per visualizzare il suggerimento, vengono memorizzate in una tabella. Il formato dei file è il seguente:

private static final String[] COLUMNS = { 
    "_id", 
    SearchManager.SUGGEST_COLUMN_ICON_1,  // ID of a drawable (icon) as String 
    SearchManager.SUGGEST_COLUMN_TEXT_1,  // main text for suggestion display 
    SearchManager.SUGGEST_COLUMN_TEXT_2,  // secondary text for suggestion display 
    SearchManager.SUGGEST_COLUMN_INTENT_DATA, // this could be an URI to access the suggestion as used in an intent with a VIEW action 
    SearchManager.SUGGEST_COLUMN_INTENT_ACTION, // this could be Intent.ACTION_VIEW 
    SearchManager.SUGGEST_COLUMN_SHORTCUT_ID // e.g. SearchManager.SUGGEST_NEVER_MAKE_SHORTCUT 
}; 

Ricerca è descritto qui in dettaglio: http://developer.android.com/guide/topics/search/index.html

+0

OK ... penso che sto cominciando a capire. Ma quando/dove vengono inseriti i suggerimenti in una tabella e in quale formato sono presenti i suggerimenti? Questo è ciò di cui sono confuso. Suppongo che questo tipo di funzionalità di "completamento automatico"/suggerimento venga implementato utilizzando un Trie o qualcosa del genere ... –

+0

cioè, che aspetto ha la tabella dei suggerimenti? o la tabella risultante non è necessariamente leggibile? quando viene creata questa tabella (devi crearla usando 'execSQL')? –

+0

Mi piacerebbe avere una semplice funzione di ricerca "auto-complete/suggerire-completa" su una determinata colonna nel mio database ... ma se ciò significa cambiare il mio intero database e fare casino con un sacco di file, potrei sempre tornare ad esso in un secondo momento (anche se credo ancora che questa cosa non dovrebbe impiegare molto tempo per implementare! tutto quello che voglio è il sistema per il completamento automatico su una singola colonna di stringhe nel mio database!). –

Problemi correlati