4

ユーザーが連絡先を検索するときに、検索ダイアログにカスタム候補を表示しようとしています。カスタム提案では、コンテンツ プロバイダが という名前の列の 1 つを含む列を返す必要がありますSearchManager.SUGGEST_COLUMN_TEXT_1

次のようにプロジェクションを宣言する Contacts プロバイダーにクエリを実行しています。

String[] projection = new String[]{Contacts._ID,Contacts.DISPLAY_NAME + " AS " + SearchManager.SUGGEST_COLUMN_TEXT_1};

しかし、これは例外をスローしています:

java.lang.IllegalArgumentException: Invalid column display_name AS suggest_text_1

私は調査してきましたが、これは連絡先プロバイダーが にstrictProjectionMapフラグを設定してSQLiteQueryBuilderいるためです。エイリアスを指定できる回避策があるかどうか疑問に思っています。いくつかの解決策を見つけましたが、それらはコンテンツ プロバイダーを変更する必要があり、この場合は Android プロバイダーであるため変更できません。

それが不可能な場合、このシナリオのベスト プラクティスは何ですか? 私の現在の解決策はMatrixCursor、正しい列名で を作成し、クエリから返されたカーソルからすべての値を連絡先プロバイダーにコピーすることですが、効率の点で非常に間違っていると感じるので、もっと良い方法があると思います.

ご提案いただきありがとうございます。ファン

4

0 に答える 0