删除自定义列表视图中的重复联系人

时间:2017-01-27 15:56:44

标签: java android listview android-contacts

我正在使用https://trinitytuts.com/get-contact-list-and-show-in-custom-listview-android/#教程获取列表视图中的联系人列表。它工作正常,但提供重复的联系人。有人可以指导此解决方案并仅在列表视图中与其联系一次。

主要活动代码如下:

Route::post('country', 'SimpleOperationsController@country');

2 个答案:

答案 0 :(得分:2)

为什么不使用Set?尝试将联系人存储在ObjectObject Set中。请务必覆盖equals基于您需要消除重复项的Object方法。

更多阅读 http://www.java2novice.com/java-collections-and-util/hashset/duplicate/

答案 1 :(得分:0)

您看到重复的联系人,因为您要查询手机列表而不是联系人,如果联系人有多个手机,您将多次获得相同的联系人 - 一个用于每个电话号码。

您需要决定如何处理多部手机的联系人,以及没有任何手机的联系人(目前您还没有显示没有手机的联系人)。

假设您希望每个联系人有一行,只显示有手机的联系人,并在同一行显示该联系人的所有手机,您需要稍微修改你的代码:

  1. SelectUser对象应该接受一个电话列表,而不仅仅是一个。
  2. selectUsers字段应为HashMap<Long, SelectUser>而不是ArrayList<SelectUser>
  3. String id = ...实际应该是Long id = ...
  4. 然后在你的游标迭代器中执行以下操作:

    if (selectUsers.containsKey(id)) {
        SelectUser selectUser = selectUsers.get(id);
        selectUser.addPhone(phoneNumber); // new method you need to implement
    } else {
        SelectUser selectUser = new SelectUser();
        selectUser.setThumb(bit_thumb);
        selectUser.setName(name);
        selectUser.setPhone(phoneNumber);
        selectUser.setEmail(id); // Email can't be retrieved from the phones table, see below
        selectUser.setCheckedBox(false);
        selectUsers.add(selectUser);
    }
    

    <强> P.S。 查询CommonDataKinds.Email表时无法读取CommonDataKinds.Phone个字段,如果要同时查询同一个查询的电话和电子邮件,则需要查询ContactsContract.Data表,并选择Data.MIMETYPE + ' = ' + Phone.CONTENT_TYPE + ' OR ' + Data.MIMETYPE + ' = ' + Email.CONTENT_TYPE。 这将为您提供 电话或电子邮件的行的光标(您可以使用Data.MIMETYPE来检查它是哪一行。

    在此处查看更多信息:https://developer.android.com/reference/android/provider/ContactsContract.Data.html https://stackoverflow.com/a/31864811/819355