1

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

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

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

4

2 回答 2

5

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

Uri uri = ContactsContract.Contacts.CONTENT_URI;

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

于 2012-08-28T16:34:08.223 回答
1

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

于 2012-08-28T16:28:59.277 回答