我有一个有效的自定义搜索建议类(通过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。
如何最好地将参数(“产品”或“制造商”)传递给搜索建议内容提供商?
答案 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)
我刚刚在我的内容提供者上为参数创建了一个静态变量,并从活动中设置它。我一直在考虑它,这是我找到的最干净的解决方法!