从 Android Studio 中的手机联系人列表中选择从特定字母开始的联系人

问题描述 投票:0回答:1

如标题所示,我想从手机联系人中选择从给定字母开始的联系人列表。 例如:如果我只想选择以 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。 任何帮助,将不胜感激。预先感谢。

android android-contacts
1个回答
0
投票

部分:

Phone.DISPLAY_NAME + " = ?",
arrayOf("A"),

表示“返回姓名为 A 的所有联系人”。

我想你想问“返回姓名以字母 A 开头的所有联系人”,这是一个不同的查询。

为此,您可以将代码更改为:

Phone.DISPLAY_NAME + " LIKE 'A%'"

如果您想要不区分大小写的查询(即包含以小“a”开头的名称),请尝试:

Phone.DISPLAY_NAME + " LIKE 'A%' COLLATE NOCASE"

但是,如果您的目标是显示所有联系人的列表,并且有一个滚动侧边栏,用户可以在其中触摸字母“C”并跳转到以该字母开头的联系人姓名,我不建议进行此类查询,而是查询对于设备上的所有联系人,并将它们全部显示在一个大的可滚动列表中,并让这些字母按钮在触摸时滚动到列表中的某个位置。

用户体验将会更加优越。

© www.soinside.com 2019 - 2024. All rights reserved.