1

電話番号を持つ連絡先を入力したいアクティビティを作成しています。

リストビューの各連絡先の前にチェックボックスを表示したいので、インテントを使用していません。

CursorLoaderを使用しています。onCreateLoaderメソッドのコードを次に示します。

String projection[] = new String[]{ContactsContract.Contacts._ID, ContactsContract.Contacts.DISPLAY_NAME};
    Uri uri = ContactsContract.Data.CONTENT_URI;

    String selection = ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1" + 
    " AND " + ContactsContract.Contacts.IN_VISIBLE_GROUP + " =1";

    String order = ContactsContract.Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC";

    CursorLoader loader = new CursorLoader(this, uri, projection, selection, null, order);

ListViewでResourceCursorAdapterのサブクラスを使用します。

重複を削除する方法を誰かが知っていますか?本当に必要な場合を除いて、セットは使いたくありません。

4

2 に答える 2

5

Contacts生のテーブルではなく、テーブルにクエリを実行することをお勧めしDataます。

Uri uri = ContactsContract.Contacts.CONTENT_URI;

データテーブルには生の連絡先データが含まれています。これは、Androidの連絡先が複数の異なるアカウントソースから集約されているため、同じ「個人」の複数のエントリを意味する場合があります。他のすべてはうまく見えます。

于 2012-08-28T16:34:08.223 に答える
1

カーソルによって返されるデータが結果を2倍にしないことをすでに確認している場合(およびコンテンツプロバイダーに重複がない場合)、問題はとの実装にある可能性がnewViewありますbindView。「空白」のビューが返されることを確認してください。つまりnewView、TextViewsまたはImageViewsの値が設定されていません。これらの値をに設定しますbindView。ほとんどbindViewの場合、ビューの値が正しく設定されていません。

于 2012-08-28T16:28:59.277 に答える