使用CursorLoader获取联系人会导致重复

时间:2012-08-28 16:22:25

标签: android cursor

我正在构建一项活动,我想填充有电话号码的联系人。

我没有使用Intent,因为我希望在listview中的每个联系人之前都有一个复选框。

我正在使用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);

我使用ResourceCursorAdapter的子类和ListView。

有没有人有任何想法我如何删除重复项?除非我真的需要,否则我不想使用Set。

2 个答案:

答案 0 :(得分:5)

我建议查询Contacts表而不是原始Data表。

Uri uri = ContactsContract.Contacts.CONTENT_URI;

数据表包含原始联系人数据,这可能意味着同一“人”的多个条目,因为Android联系人是从多个不同的帐户来源汇总的。其他一切看起来都不错。

答案 1 :(得分:1)

如果您已经验证光标返回的数据不是结果加倍(并且内容提供商没有重复项),则问题很可能出现在newViewbindView的实施中。确保newView只返回一个“空白”视图,这意味着没有设置TextViews或ImageViews的值。在bindView中设置这些值。很可能bindView未正确设置视图中的值。