SearchableInfoは、検索可能情報を持っているクラス。
SearchableInfo | Android Developers
今回は、検索可能情報の中から、あらかじめ持っているおすすめ(サジェスト)クエリをリスト表示して、それを選択させて、検索するという流れをやってみる。
(ちょっと表現が難しいけど、見ていけば流れはわかるはず・・・。)
searchable.xmlが増えた。
独自のコンテントプロバイダとサジェスト表示が連携するように。
今回、CustomContentProviderのonCreateの時点で、SearchManager.SUGGEST_COLUMN_TEXT_1というキーで"abcで検索."、SearchManager.SUGGEST_COLUMN_QUERYというキーで"abc"、というようなデータをあらかじめ入れておく。
これをやることで、このあとの入力によっては、"abcで検索."、という文字列がリスト表示される。
そしてこのリストアイテムを選択すると、"abc"というクエリがonNewIntentに投げられる。
"a"が来ただけで"abc"への問い合わせをしている。
これで"a"の入力だけで、"abcで検索."が表示される。
ACTION_SEARCHにクエリ情報が送られるので、キーと値を出してみるとわかる。
このように、"a"だけでサジェスト表示される。
"abcを検索"を押すと、
queryは"abc"、つまりサジェストのアイテムに紐づいたものになる。
しかし、user_queryは"a"となる。
自分で入力した文字列ということ。
"a"が送られる場合もある。
サジェストアイテムを選ばずにリターンを押した場合など。
user_queryも当然"a"。
このように、サジェストに検索クエリをあらかじめ表示しておいて、選択させることもできる。
ただ、これを制御するのは結構難しいし大変なので、僕はあまり細かくやりたくはないな・・・。