2011-10-30 67 views
2

我有一個工作的自定義搜索建議類(通過http://developer.android.com/guide/topics/search/adding-custom-suggestions.html)。它目前返回一種類型的信息 - 「產品名稱」。將參數傳遞給自定義搜索建議ContentProvider

我已經爲我的應用添加了一些額外的活動(屏幕),這樣如果某人在產品頁面上,啓動搜索應返回「產品名稱」的結果,但如果他們在另一活動中,我希望搜索建議能夠提取「製造商名稱」。

我看到Accessing appSearchData bundle from ContentProvider,但自定義搜索建議提供程序擴展的ContentProvider不與答案

Bundle b = intent.getBundleExtra(SearchManager.APP_DATA); 

這包是提供給搜索結果類,但不是ContentProvider的工作。

如何最好地將參數(「產品」或「製造商」)傳遞給搜索建議內容提供者?

回答

3

這似乎不是一個理想的解決方案,但我有同樣的需求,我發現我可以通過將公共ivar或方法添加到處理搜索建議的ContentProvider的子類中完成工作。在開始搜索之前,您可以根據需要配置您的提供商。您可以從活動訪問提供者實例,像這樣:

ContentProviderClient client = getContentResolver().acquireContentProviderClient("my.searchsuggestionprovider"); 
MyProviderClass provider = (MyProviderClass) client.getLocalContentProvider(); 

現在你可以用provider.setParameter("product")或任何你需要的配置。構建光標後,您可能需要將參數重置爲默認值或某些值。

編輯:這至少在我的情況下是不切實際的,因爲每次鍵入字符時都會使用query()調用內容提供者。相反,我採用了類似於set-search-hint-dynamically中描述的解決方法。通過創建替代的「可搜索的」XML定義和活動,您可以更改傳遞給query()中的內容提供者的URI,添加一個路徑組件以提供您所需的附加參數或上下文。

+0

你能詳細說明爲什麼它不切實際嗎? – aleb

0

我剛剛爲我的內容提供者的參數設置了一個靜態變量,並將其設置爲該活動。我一直在想它,這是我找到的最乾淨的解決方法!

相關問題