2011-02-15 22 views
1

我想列入一個listview查看所有聯繫方式。某些聯繫人有多個電話號碼,我想顯示一個列表如下:聯繫人合同和性能

Pippo 
Number : +393934578987 
Pippo 
Number : +394578952364 
Topolino 
Number : +45124578972 
Minnie 
Number : +39454545445b 
Minnie 
Number : +39457879758 
etc 

我用了一個SimpleAdapter與列表和地圖,但表現得很差......比我決定用SimpleCursorAdapter以及爲與此代碼

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)); 
     } 

,但它不工作

有人告訴我,爲什麼訪問表ContactsContract和ContactsContract.CommonDataKinds.Phone一個CursorJoiner?

感謝

回答

0

也許你缺少matrix_cursor.moveToFirst()通話。

2

我終於在這些日子裏工作了。我把一些東西的情況下,留下來移動光標,當左光標超出範圍(isAfterLast()實際上)

case LEFT: 
rightcursor.moveToPrevious(); 
...... 
rightcursor.moveToNext(); 
break; 

case RIGHT: 
if(leftcursor.isAfterLast()){break;} 
.... 

不知道這是否有助於什麼問題你得到的情況下右路突破。

相關問題