2012-01-29 12 views
6

Przeczytałem całą dokumentację online o tworzeniu interfejsów wyszukiwania i dodawaniu niestandardowych sugestii ... ale wciąż nie jestem pewien, jak to działa. Dokumentacja mówi, że muszę "Zbudować tabelę (tak jak w SQLiteDatabase) dla twoich sugestii i sformatować tabelę z wymaganymi kolumnami". Zakładam, że system ostatecznie wypełni tę tabelę własnymi własnymi sugestiami ... ale który proces/klasa jest za to odpowiedzialny, a kiedy pojawią się faktyczne wstawienia (zanim jakiekolwiek zapytanie zostanie wykonane przez użytkownika, po zapytanie zostało wykonane przez użytkownika itp.)?SearchManager - dodawanie własnych sugestii

I podczas gdy zadaję pytanie tutaj, jeśli ktoś mógłby wyjaśnić różnicę między AutoCompleteTextView i SearchView w/niestandardowe sugestie ... to byłoby niesamowite. AutoCompleteTextView wydaje się podejrzanie łatwe do wdrożenia w porównaniu do SearchView (co wymaga zmian w klasie pomocnika SQLiteDatabase ContentProvider itp.).

Odpowiedz

5

Należy utworzyć dostawcę zawartości, który dostarcza niestandardowe sugestie na podstawie zapytania wprowadzonego do tej pory w widoku wyszukiwania. W pliku searchable.xml skonfiguruj minimalną długość wyrażenia wyszukiwania, które musi zostać osiągnięte przed zapytaniem o sugestie. Ten dostawca treści jest nazywany dostawcą sugestii (nadal rozszerza ContentProvider). Uprawnienie dostawcy treści jest również skonfigurowane w searchable.xml.

Nie ma ograniczenia co do sposobu, w jaki dostawca sugestii oblicza swoje sugestie. Możesz przeszukiwać zapytanie sieciowe w bazie danych lub czytać plik. Ale odpowiedź na zapytanie ma format tabeli. Jeśli sugestie są bezpośrednio sprawdzane z bazy danych, możesz użyć kursora, który odpowiada kwerendie bazy danych, aby dostarczyć wynik do metody query() dostawcy treści. Jeśli wynik jest obliczany z jednego lub więcej źródeł, możesz utworzyć tabelę w locie za pomocą MatrixCursor.

Wiersze odpowiedzi od dostawcy sugestii są używane przez mechanizm wyszukiwania do wyświetlenia sugestii, są przechowywane w tabeli. Format wierszy jest następujący:

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

Wyszukany opisano tu bardziej szczegółowo: http://developer.android.com/guide/topics/search/index.html

+0

OK ... Chyba zaczynam rozumieć. Ale kiedy/gdzie są sugestie wstawione do tabeli i jaki format mają sugestie? Właśnie o to mi chodzi. Zakładam, że ten rodzaj funkcji "automatycznego uzupełniania"/sugestii byłby implementowany za pomocą Trie lub czegoś ... –

+0

czyli jak wygląda tabela sugestii? czy wynikowy stół niekoniecznie jest czytelny dla człowieka? kiedy tworzona jest ta tabela (czy trzeba ją utworzyć przy użyciu 'execSQL')? –

+0

Chciałbym uzyskać prostą funkcję "automatycznego uzupełniania/sugerowania-kompletnego" nad pewną kolumną w mojej bazie danych ... ale jeśli to oznacza zmianę całej mojej bazy danych i mieszanie z kilkoma plikami, zawsze mogę zwrócić do tego w późniejszym terminie (chociaż nadal uważam, że to nie powinno zająć tyle czasu, aby zaimplementować! Wszystko czego chcę, to system do automatycznego uzupełniania przez jedną kolumnę ciągów w mojej bazie danych!). –

Powiązane problemy