SearchableInfo

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"だけでサジェスト表示
"a"だけでサジェスト表示

このように、"a"だけでサジェスト表示される。
"abcを検索"を押すと、

queryは"abc"
queryは"abc"

queryは"abc"、つまりサジェストのアイテムに紐づいたものになる。

user_queryは"a"
user_queryは"a"

しかし、user_queryは"a"となる。
自分で入力した文字列ということ。

"a"が送られる場合もある
"a"が送られる場合もある

"a"が送られる場合もある。
サジェストアイテムを選ばずにリターンを押した場合など。

user_queryも当然"a"
user_queryも当然"a"

user_queryも当然"a"。

このように、サジェストに検索クエリをあらかじめ表示しておいて、選択させることもできる。
ただ、これを制御するのは結構難しいし大変なので、僕はあまり細かくやりたくはないな・・・。

Sample/android/SearchableInfo/SearchableInfo/src/SearchableInfo at master · bg1bgst333/Sample · GitHub