Android display contacts of type custom

好久不见. 提交于 2019-12-02 10:16:32

you can also modify this query dear

cntx.getContentResolver().query(Contacts.CONTENT_URI, CONTACTS_SUMMARY_PROJECTION, select,
                    null, Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC");

i maintain one contact wrapper so i have all contact in one array list with name and all info so now just make one more contact name list which you want to display just check with original and display only those which you want

package com.rightbackup.parsing;

    import java.util.ArrayList;
    import java.util.HashMap;

    import android.app.Activity;
    import android.content.Context;
    import android.database.Cursor;
    import android.graphics.Color;
    import android.os.AsyncTask;
    import android.provider.ContactsContract;
    import android.provider.ContactsContract.CommonDataKinds.Phone;
    import android.provider.ContactsContract.Contacts;
    import android.widget.ListView;

    import com.rightbackup.constants.Constant;
    import com.rightbackup.setcontent.ContactsAdapter;
    import com.rightbackup.wrapper.ContactsWrapper;
    import com.rightbackup.wrapper.DataController;

    public class ReadContacts extends AsyncTask<Void, Void, Void>{

        private ListView contactsList;

        private Context cntx;
        private Constant constants;

        static final String[] CONTACTS_SUMMARY_PROJECTION = new String[] {
            Contacts._ID, // 0
            Contacts.DISPLAY_NAME, // 1
            Contacts.STARRED, // 2
            Contacts.TIMES_CONTACTED, // 3
            Contacts.CONTACT_PRESENCE, // 4
            Contacts.PHOTO_ID, // 5
            Contacts.LOOKUP_KEY, // 6
            Contacts.HAS_PHONE_NUMBER, // 7
        };

        private long contactId;
        private String display_name;
        private String phoneNumber;

        private ArrayList<ContactsWrapper>contactWrap = new ArrayList<ContactsWrapper>();
        private HashMap<Long, ArrayList<ContactsWrapper>>map = new HashMap<Long, ArrayList<ContactsWrapper>>();

        private ContactsAdapter adapter;

        private DataController controller;

        public ReadContacts(Context cntx, ListView contactList) {
            // TODO Auto-generated constructor stub
            this.cntx = cntx;
            constants = new Constant();
            this.contactsList = contactList;

            controller = DataController.getInstance(); 
        }

        @Override
        protected void onPreExecute() {
            // TODO Auto-generated method stub
            super.onPreExecute();
            if(!(controller.contactWrapper.size()>0))
                 constants.displayProgressDialog(cntx, "Loading Contacts...", "Please Wait");
        }

        @Override
        protected Void doInBackground(Void... params) {
            // TODO Auto-generated method stub

            if(!(controller.contactWrapper.size()>0))
            {
            try {
                String select = "((" + Contacts.DISPLAY_NAME + " NOTNULL) AND ("
                        + Contacts.HAS_PHONE_NUMBER + "=1) AND ("
                        + Contacts.DISPLAY_NAME + " != '' ))";

                Cursor c = cntx.getContentResolver().query(Contacts.CONTENT_URI, CONTACTS_SUMMARY_PROJECTION, select,
                        null, Contacts.DISPLAY_NAME + " COLLATE LOCALIZED ASC");

                int colorcounter = 0;
                String[] colorcounter_array = { "#91A46B", "#8BB6B5", "#CAA973", "#8DA6C8","#D19B8D"};

                int color_string;
                for(int i=0;i<c.getCount();i++)
                {
    //              contactWrap.clear();
                    try {
                        contactId = 0;
                        String hasPhone = "";
                        display_name = "";
                        phoneNumber = "";

                        c.moveToPosition(i);

                        contactId =  c.getLong(0);
                        display_name = c.getString(1);
                        hasPhone = c.getString(7);

                        if (hasPhone.equalsIgnoreCase("1"))
                            hasPhone = "true";
                        else
                            hasPhone = "false" ;

                        if (Boolean.parseBoolean(hasPhone)) 
                        {
                            Cursor phones = cntx.getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null,ContactsContract.CommonDataKinds.Phone.CONTACT_ID +" = "+ contactId,null, null);
                            while (phones.moveToNext()) 
                            {
                                int indexPhoneType = phones.getColumnIndexOrThrow(Phone.TYPE);
                                String phoneType =  phones.getString(indexPhoneType);

                                phoneNumber = phones.getString(phones.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 

                                String lookupKey = phones.getString(phones.getColumnIndex(ContactsContract.Contacts.LOOKUP_KEY));

                                if (colorcounter < 5) 
                                {
                                    color_string =Color.parseColor(colorcounter_array[colorcounter]);
                                    colorcounter++;
                                } else {
                                    colorcounter = 0;
                                    color_string =Color.parseColor(colorcounter_array[colorcounter]);
                                    colorcounter++;
                                }
                                contactWrap.add(new ContactsWrapper(contactId, display_name, phoneNumber,lookupKey,false,color_string));
                            }
    //                      map.put(contactId, new ArrayList<ContactsWrapper>(contactWrap));
                            phones.close();
                        }
                    } catch (Exception e) {

                        e.printStackTrace();
                    }  
                }
                controller.contactWrapper = contactWrap;
            }
            catch (Exception e) {
                // TODO: handle exception
                e.printStackTrace();
            }
            }

            return null;
        }

        @Override
        protected void onPostExecute(Void result) {
            // TODO Auto-generated method stub
            super.onPostExecute(result);
            constants.dismissDialog();

            adapter = new ContactsAdapter(cntx);
            contactsList.setAdapter(adapter);
        }

    }

and this is my contact wrapper class

package com.rightbackup.wrapper;

public class ContactsWrapper {

    private long contactId;
    private String displayName,displayNumber,lookUp;
    public boolean checked = true;
    int color_string;

    public ContactsWrapper(long contactId, String displayName, String displayNumber, String lookUp, boolean checked,int color_string) {
        // TODO Auto-generated constructor stub
        this.contactId = contactId;
        this.displayName = displayName;
        this.displayNumber = displayNumber;
        this.lookUp = lookUp;
        this.checked = checked;
        this.color_string =color_string;
    }

    public String getLookUp() {
        return lookUp;
    }

    public int getColor_string() {
        return color_string;
    }

    public boolean isChecked() {
        return checked;
    }

    public long getContactId() {
        return contactId;
    }

    public String getDisplayName() {
        return displayName;
    }

    public String getDisplayNumber() {
        return displayNumber;
    }

    public void setChecked(boolean checked) {
        this.checked = checked;
    }

}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!