2012-08-28 35 views
1

我正在构建一个活动,我想用具有电话号码的联系人填充活动。使用CursorLoader获取联系人导致重复

我没有使用意图,因为我想在那里有一个复选框,在我的列表视图中的每个联系人之前。

我正在使用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的子类。

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

+0

你可以包含你的ResourceCursorAdapter吗? – Flynn81

回答

5

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

Uri uri = ContactsContract.Contacts.CONTENT_URI; 

数据表包含原始联系人数据,这可能意味着对于相同的“人”由于Android触点从多个不同帐户的来源聚集多个条目。其他一切都很好。

+1

谢谢兄弟!这就是它!今天学到的东西:) – Stephen

+1

如果字段在“联系人”表中不可用,该怎么办?例如我需要获取所有联系人的名称和姓名,从联系人查询是不够的 – xialin

1

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