6

検索インタフェースの構築とカスタム提案の追加については、すべてのドキュメントをオンラインで読んだことがありますが、これはどういう仕組みがまだ不明です。ドキュメントでは、私は "(SQLiteDatabaseのような)テーブルをビルドして、あなたの提案に合わせてテーブルを必要な列でフォーマットする"必要があると言います。私は、システムが最終的にはこのテーブルに独自の適切な提案を記入すると仮定していますが、どのプロセス/クラスがこの責任を負いますか。実際の挿入はいつ行われますか?クエリがユーザーによって行われたかなど)SearchManager - カスタム提案を追加する

私はここで質問していますが、誰かがAutoCompleteTextViewSearchViewのカスタム提案の違いを明らかにすることができたら...それはすばらしいでしょう。 AutoCompleteTextViewは、SearchViewContentProvider、SQLiteDatabaseヘルパークラスなどに変更する必要があります)と比較して、実装が疑わしいようです。

答えて

5

これまでに検索ビューに入力したクエリに基づいてカスタム提案を提供するコンテンツプロバイダを作成する必要があります。 searchable.xmlには、検索式の最小長を設定します。これには、提案を求める前に到達する必要があります。このコンテンツプロバイダは、提案プロバイダ(ContentProviderを拡張しています)と呼ばれます。コンテンツプロバイダの権限もsearchable.xmlで設定されます。

提案プロバイダが提案をどのように計算するかに制限はありません。 Webクエリーをデータベースで検索したり、ファイルを読み取ったりすることができます。しかし、クエリの答えはテーブルの形式です。提案がデータベースから直接照会された場合は、データベースクエリによってカーソルが応答され、結果がコンテンツプロバイダのquery()メソッドに渡されます。結果が1つ以上のソースから計算される場合は、MatrixCursorを使用してその場でテーブルを作成することができます。

提案プロバイダからの回答の行は、検索メカニズムによって提案を表示するために使用され、テーブルに格納されます。次のように行の形式は次のとおりです。

private static final String[] COLUMNS = { 
    "_id", 
    SearchManager.SUGGEST_COLUMN_ICON_1,  // ID of a drawable (icon) as String 
    SearchManager.SUGGEST_COLUMN_TEXT_1,  // main text for suggestion display 
    SearchManager.SUGGEST_COLUMN_TEXT_2,  // secondary text for suggestion display 
    SearchManager.SUGGEST_COLUMN_INTENT_DATA, // this could be an URI to access the suggestion as used in an intent with a VIEW action 
    SearchManager.SUGGEST_COLUMN_INTENT_ACTION, // this could be Intent.ACTION_VIEW 
    SearchManager.SUGGEST_COLUMN_SHORTCUT_ID // e.g. SearchManager.SUGGEST_NEVER_MAKE_SHORTCUT 
}; 

検索はここでより詳細に説明されていますhttp://developer.android.com/guide/topics/search/index.html

+0

OK ...私は私が理解し始めていますね。しかし、いつどこで提案がテーブルに挿入され、どのフォーマットがどのようなフォーマットになっていますか?それは私が混乱していることです。私は、この種の「オートコンプリート」/提案機能はTrieなどを使って実装されると考えています... –

+0

つまり提案表はどのように見えますか?必ずしも人間が読めるとは限りません。このテーブルはいつ作成されますか( 'execSQL'を使って作成する必要がありますか?) –

+0

データベースの特定の列に対して単純な「オートコンプリート/示唆完全」検索機能を使用したいと考えていますが、データベース全体を変更して多数のファイルを混乱させるということは、 (私はまだこのことは実装するのに時間がかかりませんが、私の望むのは、システムがデータベース内の文字列の1つの列に対して自動的に完了することです)。 –

関連する問題