我正在使用https://trinitytuts.com/get-contact-list-and-show-in-custom-listview-android/#教程获取列表视图中的联系人列表。它工作正常,但提供重复的联系人。有人可以指导此解决方案并仅在列表视图中与其联系一次。
主要活动代码如下:
Route::post('country', 'SimpleOperationsController@country');
答案 0 :(得分:2)
为什么不使用Set
?尝试将联系人存储在Object
和Object
Set
中。请务必覆盖equals
基于您需要消除重复项的Object
方法。
更多阅读 http://www.java2novice.com/java-collections-and-util/hashset/duplicate/
答案 1 :(得分:0)
您看到重复的联系人,因为您要查询手机列表而不是联系人,如果联系人有多个手机,您将多次获得相同的联系人 - 一个用于每个电话号码。
您需要决定如何处理多部手机的联系人,以及没有任何手机的联系人(目前您还没有显示没有手机的联系人)。
假设您希望每个联系人有一行,只显示有手机的联系人,并在同一行显示该联系人的所有手机,您需要稍微修改你的代码:
SelectUser
对象应该接受一个电话列表,而不仅仅是一个。selectUsers
字段应为HashMap<Long, SelectUser>
而不是ArrayList<SelectUser>
String id = ...
实际应该是Long id = ...
然后在你的游标迭代器中执行以下操作:
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