您必須創建一個內容提供者,該內容提供者根據迄今爲止在搜索視圖中輸入的查詢提供您的自定義建議。在您的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
OK ......我想我開始明白。但是,何時/何地將建議插入表格中,建議的格式是什麼?這就是我所困惑的。我會假設這種「自動完成」/建議功能將使用Trie或其他東西來實現...... – 2012-01-29 16:08:17
即建議表是什麼樣子的?或者結果表不一定是人類可讀的?這個表是什麼時候創建的(你是否需要使用'execSQL'來創建它)? – 2012-01-29 16:23:57
我想在我的數據庫中的某一列上獲得簡單的「自動完成/建議完成」搜索功能......但如果這意味着更改整個數據庫並混淆一堆文件,我總是可以返回(儘管我仍然相信這件事不應該花太長時間才能實現!我想要的只是系統自動完成數據庫中的一列字符串!)。 – 2012-01-29 16:27:02