2011-09-06 63 views

回答

39
+0

感謝的人!你真棒:D –

0

利用這個代碼來檢索聯繫人

ArrayList<HashMap<String,String>> contactData=new ArrayList<HashMap<String,String>>(); 
ContentResolver cr = getContentResolver(); 
    Cursor cursor = getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,null, null, null, null); 
    while (cursor.moveToNext()) { 
     try{ 
     String contactId = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID)); 
     String name=cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)); 
     String hasPhone = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER)); 
     if (Integer.parseInt(cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.HAS_PHONE_NUMBER))) > 0) { 
      Cursor phones = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId, null, null); 
      while (phones.moveToNext()) { 
       String phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
       HashMap<String,String> map=new HashMap<String,String>(); 
       map.put("name", name); 
       map.put("number", phoneNumber); 
       contactData.add(map); 
      } 
      phones.close(); 
     } 
    }catch(Exception e){} 
    } 

現在的聯繫人詳細信息存儲在contactData ArrayList。現在排序此ArrayList像波紋管

Collections.sort(contactData, new Comparator(){ 
       @Override 
       public int compare(Object o1, Object o2) { 
        HashMap map1=(HashMap)o1; 
        HashMap map2=(HashMap)o2; 
        String s1=(String)map1.get("name"); 
        String s2=(String)map2.get("name"); 
        return s1.compareTo(s2); 
       } 
      }); 

現在聯繫人詳細信息存儲在聯絡資料 ArrayList中的排列順序。

+0

這工作,但每個聯繫人重複 – Gibs

0

我已經加入字母頭到聯繫人列表

new ReadContactTask(context, showProgressDialog,new OnContactReadListener() { 
      @Override 
      public void onContactRead(List<ContactItem> dummyList) { 

       ArrayList<ContactItem> latestPhoneContacts = new ArrayList<>(); 

       if(dummyList!=null && dummyList.size()>0) 
       { 
        tvNoResult.setVisibility(View.GONE); 

        for(ContactItem contactItem : dummyList){ 
         String contactNameInCapital = ""; 
         if(contactItem.getContactName()!=null && contactItem.getContactName().length()>2){ 
          contactNameInCapital = contactItem.getContactName().substring(0,1).toUpperCase(); 

          if(contactNameInCapital.charAt(0) != previousContact.charAt(0)) 
          { 
           latestPhoneContacts.add(new ContactItem(contactNameInCapital.substring(0,1))); 
           latestPhoneContacts.add(contactItem); 
          } 
          else 
          { 
           latestPhoneContacts.add(contactItem); 
          } 

          previousContact = contactNameInCapital; 
         } 
        } 
        if(latestPhoneContacts!=null && latestPhoneContacts.size()>0) 
         contactListAdapter.addItems(latestPhoneContacts); 
       } 
      } 

      @Override 
      public void onContactEmpty() { 

      } 
     }).execute(); 

其中

private String previousContact ="Zee"; 
+0

什麼是ContactItem – Gibs

0

你需要這樣做:

Cursor cursor = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME + " ASC"); 
相關問題