将参数传递给自定义搜索建议ContentProvider

时间:2011-10-30 18:52:42

标签: android search android-contentprovider

我有一个有效的自定义搜索建议类(通过http://developer.android.com/guide/topics/search/adding-custom-suggestions.html)。它目前返回一种信息 - “产品名称”。

我已经在我的应用中添加了一些额外的活动(屏幕),这样如果一个人在产品页面上,启动搜索应返回“产品名称”的结果,但如果他们在另一个活动中,我会像搜索建议拉“制造商名称”。

我看到了Accessing appSearchData bundle from ContentProvider,但是自定义搜索建议提供程序扩展了ContentProvider,它无法解决问题

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

此Bundle可用于搜索结果类,但不适用于contentprovider。

如何最好地将参数(“产品”或“制造商”)传递给搜索建议内容提供商?

2 个答案:

答案 0 :(得分:3)

这似乎不是一个理想的解决方案,但我有同样的需求,我发现我可以通过向处理搜索建议的ContentProvider的子类添加公共ivar或方法来完成工作。在开始搜索之前,您可以根据需要配置提供商。您可以从以下活动访问提供程序实例:

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

现在您可以使用provider.setParameter("product")或您需要的任何内容进行配置。您可能需要在构建光标后将参数重置为默认值。

编辑:事实证明这是不切实际的,至少在我的情况下,因为每次输入一个字符时都会使用query()调用内容提供程序。相反,我采用了类似于set-search-hint-dynamically中描述的解决方法。通过创建备用的“可搜索”XML定义和活动,您可以更改在query()中传递给内容提供程序的URI,添加路径组件以提供所需的其他参数或上下文。

答案 1 :(得分:0)

我刚刚在我的内容提供者上为参数创建了一个静态变量,并从活动中设置它。我一直在考虑它,这是我找到的最干净的解决方法!