这看起来像是一个简单的用例,但我无法找到一种方法来做到这一点。 我想要检索Android手机中的所有联系人及其所有电话号码。 比方说,下面是我的手机上的联系人与他们的电话号码一起名单:使用CursorLoader显示多个电话号码的联系人
A - 1111(移动),2222(家),3333(工作)
乙 - 4444(移动),5555 (首页)
ç - 6666(移动),7777(家),8888(工作)
我想显示在下面的方式,但使用CursorLoader的联系人。
事情我已经尝试:
- 获取所有的联系人和电话号码的时间和它们保存在自定义联系人对象的数组列表,并使用它们显示在列表中一个RecyclerView。
- 问题是,如果有很多电话号码,则重新访问此屏幕会导致空白屏幕,可能是由于资源不是空闲或内存泄漏问题。
#1不会缩进的代码可以正确所以在这里,它是:https://pastebin.com/y9i5R5iN
final Uri uri = Uri.withAppendedPath(ContactsContract.Contacts.CONTENT_URI, String.valueOf(contactListCursor.getLong(ContactsQuery.ID)));
Uri thisContactUri = ContactsContract.Contacts.lookupContact(context.getContentResolver(), uri);
final UserContact contact = new UserContact();
contact.setName(contactListCursor.getString(contactListCursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)));
final ArrayList<PhoneType> multipleContacts = new ArrayList<>();
final Uri phoneNumUri = Uri.withAppendedPath(thisContactUri, ContactsContract.Contacts.Data.CONTENT_DIRECTORY);
final Cursor contactPhoneNumCursor = contentResolver.query(phoneNumUri, ContactPhoneQuery.PROJECTION, ContactPhoneQuery.SELECTION, null, null);
- 使用CursorLoader并通过查询ContactsContract.Contacts.CONTENT_URI一个CursorAdapter获取所有联系人并获取ID和DISPLAY_NAME_PRIMARY。在getView()方法中,我认为我可以初始化第二个CursorLoader以调用第一个光标给我的联系的详细信息。像这样:
如果用户有多个联系人,然后显示单选按钮的列表,否则显示一个文本视图与他们唯一的数字。
这似乎预先加载的电话号码,而不是稍后更新视图。要么是因为有延迟或者我不确定。 有人可以帮助我这个。 检查
您应该真的避免在getView上执行光标读取,这会导致某些设备出现可怕的性能,滚动性能不佳。明天我会发布一个更简单的解决方案,如果我有时间 – marmor
是的我同意,而且我在一些旧手机中滚动时看到性能问题,但是当你说我应该避免在getView中读取光标时,你的意思是我不应该这么做第二部分我查找_ID字段并获取联系人的所有电话号码?或者你的意思是我不应该在listview上使用CustomAdapter的游标加载器?因为Android开发人员页面上的示例使用游标加载联系人姓名,并使用第二个游标来获取onClick中的详细信息。如果您能够提出更好的方法,我会很高兴,因为这可以使旧设备上的滚动更平滑。 – LeoNeo