如标题所示,我想从手机联系人中选择从给定字母开始的联系人列表。 例如:如果我只想选择以 A 开头的联系人,我当前尝试的代码是:
val selecteContactsList: ArrayList<SelectedContactItem> = arrayListOf()
val cursor = context.contentResolver.query(
ContactsContract.CommonDataKinds.Phone.CONTENT_URI,
arrayOf(
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER
),
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " = ?",
arrayOf("A"),
ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME
)
while (cursor!!.moveToNext()) {
val contactName =
cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME))
val contactNumber =
cursor.getString(cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))
val contactItem = SelectedContactItem(contactNumber, contactName)
selecteContactsList.add(contactItem)
}
cursor.close()
但这并没有给出任何输出。所选联系人总数为 0。 任何帮助,将不胜感激。预先感谢。
部分:
Phone.DISPLAY_NAME + " = ?",
arrayOf("A"),
表示“返回姓名为 A 的所有联系人”。
我想你想问“返回姓名以字母 A 开头的所有联系人”,这是一个不同的查询。
为此,您可以将代码更改为:
Phone.DISPLAY_NAME + " LIKE 'A%'"
如果您想要不区分大小写的查询(即包含以小“a”开头的名称),请尝试:
Phone.DISPLAY_NAME + " LIKE 'A%' COLLATE NOCASE"
但是,如果您的目标是显示所有联系人的列表,并且有一个滚动侧边栏,用户可以在其中触摸字母“C”并跳转到以该字母开头的联系人姓名,我不建议进行此类查询,而是查询对于设备上的所有联系人,并将它们全部显示在一个大的可滚动列表中,并让这些字母按钮在触摸时滚动到列表中的某个位置。
用户体验将会更加优越。