如何在列表视图中按字母顺序显示联系人

问题描述:

我有一个自定义列表视图,我需要按字母顺序显示联系人可以提供示例代码我如何实现这一目标?如何在列表视图中按字母顺序显示联系人

+0

感谢的人!你真棒:D –

利用这个代码来检索联系人

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

我已经加入字母头到联系人列表

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

你需要这样做:

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