【问题标题】:How to display Contacts in alphabetic order in Listview [closed]如何在Listview中按字母顺序显示联系人[关闭]
【发布时间】:2011-11-11 02:50:53
【问题描述】:

我有一个自定义列表视图,我需要按字母顺序显示联系人,你能提供示例代码如何实现吗?

【问题讨论】:

    标签: android alphabetical


    【解决方案1】:

    【讨论】:

    • 谢谢你!你太棒了:D
    【解决方案2】:

    你需要这样做:

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

    【讨论】:

    • 谢谢。我想知道为什么问题所有者不接受它
    【解决方案3】:

    使用此代码检索联系人

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

    现在联系人详细信息按排序顺序存储在 contactData ArrayList 中。

    【讨论】:

    • 这行得通,但每个联系人都有重复项
    【解决方案4】:

    我已将字母标题添加到联系人列表中

    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";
    

    【讨论】:

    • 什么是 ContactItem
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-30
    • 1970-01-01
    • 2017-06-05
    • 1970-01-01
    相关资源
    最近更新 更多