2012-01-29 63 views
6

我已閱讀所有關於構建搜索界面和添加自定義建議的文檔,但我仍不清楚這是如何工作的。該文件說,我必須「建立一個表(如在SQLiteDatabase)爲您的建議和格式與表所需的列」。我假設系統最終會自己填寫適當的建議...但是哪個進程/類負責這個,什麼時候會發生實際的插入(在用戶進行任何查詢之前,在查詢已由用戶進行等)?搜索管理器 - 添加自定義建議

雖然我要問一個問題在這裏,如果有人可以澄清一個AutoCompleteTextViewSearchView瓦特之間的差異/自定義的建議...那簡直是真棒。 AutoCompleteTextViewSearchView(需要對ContentProvider,SQLiteDatabase輔助類等進行更改)相比,似乎很容易實現。

回答

5

您必須創建一個內容提供者,該內容提供者根據迄今爲止在搜索視圖中輸入的查詢提供您的自定義建議。在您的searchable.xml中,您可以配置搜索表達式的最小長度,在徵求建議之前必須達到該長度。這個內容提供者被稱爲建議提供者(它仍然擴展了ContentProvider)。內容提供者的權限也在searchable.xml中配置。

建議提供者如何計算其建議沒有限制。您可以搜索Web查詢數據庫或讀取文件。但查詢的答案是以表格的格式。如果直接從數據庫查詢建議,則可以使用由數據庫查詢回答的指針將結果提供給內容提供者的query()方法。如果結果是從一個或多個源計算的,則可以使用MatrixCursor即時創建表。

來自建議提供者的答案行被搜索機制用來顯示建議,它們存儲在一個表中。該行的格式如下:

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

搜索進行了更詳細的描述如下:http://developer.android.com/guide/topics/search/index.html

+0

OK ......我想我開始明白。但是,何時/何地將建議插入表格中,建議的格式是什麼?這就是我所困惑的。我會假設這種「自動完成」/建議功能將使用Trie或其他東西來實現...... – 2012-01-29 16:08:17

+0

即建議表是什麼樣子的?或者結果表不一定是人類可讀的?這個表是什麼時候創建的(你是否需要使用'execSQL'來創建它)? – 2012-01-29 16:23:57

+0

我想在我的數據庫中的某一列上獲得簡單的「自動完成/建議完成」搜索功能......但如果這意味着更改整個數據庫並混淆一堆文件,我總是可以返回(儘管我仍然相信這件事不應該花太長時間才能實現!我想要的只是系統自動完成數據庫中的一列字符串!)。 – 2012-01-29 16:27:02

相關問題