2011-10-30 12 views
2

私は働くカスタム検索の提案クラスを持っています(http://developer.android.com/guide/topics/search/adding-custom-suggestions.html経由)。現在、1つのタイプの情報、「製品名」を返します。カスタム検索の提案にパラメータを渡すContentProvider

アプリにいくつかのアクティビティ(画面)が追加されているため、商品ページにいるユーザーが検索を開始すると「商品名」の検索結果が返されますが、他のアクティビティの場合は検索の提案が「製造業者の名前」を引き出すことを望む。

私は Accessing appSearchData bundle from ContentProviderを見ましたが、カスタム検索候補プロバイダーは答え

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

このバンドルには、検索結果のクラスに使用できますが、ないのContentProviderでは動作しないのContentProviderを拡張します。

パラメータ(「製品」または「製造元」)を検索候補コンテンツプロバイダに渡すにはどうすればよいですか?

答えて

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を変更し、必要な追加パラメータやコンテキストを提供するパスコンポーネントを追加できます。

+0

なぜそれが実用的でないのか詳細を教えてください。 – aleb

0

コンテンツプロバイダーのパラメータに静的変数を作成し、それをアクティビティから設定しました。私はそれについて考えており、それは私が見つけた最もクリーンな回避策です!

関連する問題