如何在android studio中显示按地址排序的联系人姓名和号码
Posted
技术标签:
【中文标题】如何在android studio中显示按地址排序的联系人姓名和号码【英文标题】:How to display contact name and number sorted by address in android studio 【发布时间】:2021-11-30 03:50:59 【问题描述】:我必须在回收站视图中显示联系人姓名和电话号码。但是,排序顺序应该是按地址排序,这意味着如果一个联系人保存了地址,那么它应该在回收站视图中显示在第一位,然后是没有地址的联系人。所有代码都在工作。我不知道如何按地址排序,然后在回收站视图中显示。
代码是: 公共无效 getContactList()
Uri phoneUri = ContactsContract.CommonDataKinds.Phone.CONTENT_URI;
String sortOrder = ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME;
ContentResolver resolver = getContentResolver();
Cursor cursor = resolver.query(phoneUri, null, null, null, sortOrder);
if (cursor.getCount() > 0)
while (cursor.moveToNext())
contact= new Contact();
contact.setName(cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)));
contact.setNumber(cursor.getString(cursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.Phone.NUMBER)));
contact.setContactId(cursor.getLong(cursor.getColumnIndexOrThrow(ContactsContract.Data.CONTACT_ID)));
contact.setAddresses(getAddressesByContactId(contact.getContactId()));
contactList.add(contact);
cursor.close();
setContactsRecyclerView();
私有 ArrayList getAddressesByContactId(long contactId)
Uri addressUri = ContactsContract.CommonDataKinds.StructuredPostal.CONTENT_URI;
String sortOrder = ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS;
String addressSelection = ContactsContract.Data.CONTACT_ID + "=" + contactId;
Cursor addressCursor = getContentResolver().query(addressUri, null, addressSelection, null, sortOrder);
ArrayList<String> addresses = new ArrayList<>();
if (addressCursor.getCount() >0)
while (addressCursor.moveToNext())
addresses.add(addressCursor.getString(addressCursor.getColumnIndexOrThrow(ContactsContract.CommonDataKinds.StructuredPostal.FORMATTED_ADDRESS)));
addressCursor.close();
return addresses;
私人无效 setContactsRecyclerView()
recyclerView.setLayoutManager(new LinearLayoutManager(this));
recyclerViewAdapter = new RecyclerViewAdapter(this, contactList);
recyclerView.setAdapter(recyclerViewAdapter);
【问题讨论】:
【参考方案1】:您只需对contactList
进行排序,然后再将其设置为recyclerViewAdapter
。
这是一个示例排序函数:
Collections.sort(contactList, new Comparator<Contact>()
@Override
public int compare(Contact a, Contact b)
String address1 = (a.getAddresses().isEmpty() ? null : a.getAddresses().get(0);
String address2 = (b.getAddresses().isEmpty() ? null : b.getAddresses().get(0);
int addressCompare = StringUtils.compare(address1, address2, false);
if (addressCompare != 0)
return addressCompare;
return StringUtils.compare(a.getName(), b.getName(), false);
);
如果有多个地址,只按第一个排序
我使用的是 apache 的 StringUtils for null-safe string compare,带有一个布尔值,表示 null 应该位于顶部还是底部。
【讨论】:
以上是关于如何在android studio中显示按地址排序的联系人姓名和号码的主要内容,如果未能解决你的问题,请参考以下文章
如何在android studio的textview中显示用户Android Mac地址
如何在 Android Studio 中使用按钮按初始筛选并使用 SQLite 将其显示在另一个活动上
按字母顺序排序音乐播放器的播放列表(Android Studio)