Android 合同与履行
我想把所有的联系电话都放到列表视图中。某些联系人有多个电话号码,我想显示以下列表:Android 合同与履行,android,listview,android-listview,contacts,Android,Listview,Android Listview,Contacts,我想把所有的联系电话都放到列表视图中。某些联系人有多个电话号码,我想显示以下列表: Pippo Number : +393934578987 Pippo Number : +394578952364 Topolino Number : +45124578972 Minnie Number : +39454545445b Minnie Number : +39457879758 etc 我使用了一个带有列表和映射的SimpleAdapter,但性能很差…于是我决定使用SimpleCorsorAd
Pippo
Number : +393934578987
Pippo
Number : +394578952364
Topolino
Number : +45124578972
Minnie
Number : +39454545445b
Minnie
Number : +39457879758
etc
我使用了一个带有列表和映射的SimpleAdapter,但性能很差…于是我决定使用SimpleCorsorAdapter和for来访问表contacts contract和contacts contract.commonDataTypes.Phone一个游标连接程序,并使用此代码
Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI, null, ContactsContract.Contacts.HAS_PHONE_NUMBER + "=1", null, null);
Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI,null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = " + Contacts._ID, null, null);
String[] cursor_join = new String[]{
Contacts._ID,
ContactsContract.Contacts.DISPLAY_NAME,
ContactsContract.CommonDataKinds.Phone.NUMBER
};
MatrixCursor matrix_cursor = new MatrixCursor(cursor_join);
CursorJoiner cursor_j = new CursorJoiner(cursor, new String[]{Contacts._ID}, phones, new String[]{ContactsContract.CommonDataKinds.Phone.CONTACT_ID});
for (CursorJoiner.Result joinerResult : cursor_j) {
String[] values;
switch (joinerResult) {
case LEFT: // handle case where a row in cursorA is unique
values = new String[]{
cursor.getString(cursor.getColumnIndex(Contacts._ID)),
cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)),
phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))
};
matrix_cursor.addRow(values);
break;
case RIGHT: // handle case where a row in cursorB is unique
break;
case BOTH: // handle case where a row with the same key is in both cursors
values = new String[]{
cursor.getString(cursor.getColumnIndex(Contacts._ID)),
cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)),
phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER))
};
matrix_cursor.addRow(values);
break;
}
}
while(matrix_cursor.moveToNext()){
contactId = matrix_cursor.getInt(matrix_cursor.getColumnIndex(Contacts._ID));
String name = matrix_cursor.getString(matrix_cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));
String num = matrix_cursor.getString(matrix_cursor.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
}
但它不起作用
有人告诉我为什么吗
谢谢也许你错过了对
matrix\u cursor.moveToFirst()的调用
这些天我终于解决了这个问题。我在case LEFT中放置了一些东西,以便在左光标超出范围时移动光标并在case RIGHT中打断(isAfterLast()
实际上)
不确定这是否有帮助以及您遇到了什么问题
case LEFT:
rightcursor.moveToPrevious();
......
rightcursor.moveToNext();
break;
case RIGHT:
if(leftcursor.isAfterLast()){break;}
....