这不是我们要走的路。
CommonDataKinds.Phone.CONTENT_URI
是一张桌子
在Contacts DB中,不是Contacts。
因此,即使你只过滤到一个帐户,如果一个联系人包含多个电话,它也会在你的列表中出现两次。
CursorLoader
范例(实际上很糟糕,无论如何我都不会使用它)。
而是对
Phones.CONTENT_URI
HashMap
从…起
CONTACT_ID
到列表
NUMBER
s、 然后在地图中每个项目显示一行,你就可以访问该联系人的手机列表进行显示。
Map<String, List<String>> contacts = new HashMap<String, List<String>>();
String[] projection = { Phone.CONTACT_ID, Phone.DISPLAY_NAME, Phone.NUMBER };
Cursor cur = cr.query(Phone.CONTENT_URI, projection, null, null, null);
while (cur != null && cur.moveToNext()) {
long id = cur.getLong(0);
String name = cur.getString(1);
String data = cur.getString(2); // the actual info, e.g. +1-212-555-1234
Log.d(TAG, "got " + id + ", " + name + ", " + data);
// add info to existing list if this contact-id was already found, or create a new list in case it's new
String key = id + " - " + name;
List<String> infos;
if (contacts.containsKey(key)) {
infos = contacts.get(key);
} else {
infos = new ArrayList<String>();
contacts.put(key, infos);
}
infos.add(data);
}
// now you can iterate over the 'contacts' map to display all contacts