【问题标题】:Android Contact Picker ChecklistAndroid 联系人选取器清单
【发布时间】:2013-10-31 20:33:42
【问题描述】:

我正在尝试创建一个“多选”联系人列表,我可以在其中允许用户检查多个联系人。我正在寻找的实际上与向多个联系人撰写消息时出现的本机活动相同。谢谢!

【问题讨论】:

  • 正在尝试使用 ContactsContract 的东西,但 1.6 兼容会很好。我的问题是复选框部分。 Android 是否有某种带有复选框的本机联系人选择器,如消息传递中使用的那样?

标签: android contacts


【解决方案1】:

首先您需要获取联系人列表,然后将其显示在 ListView 元素上。例如,我使用以下代码在 ListView 上显示所有用户联系人:

                 // Run query on all contacts id
                Uri uri = ContactsContract.Contacts.CONTENT_URI;
                String[] projection = new String[] { ContactsContract.Contacts._ID,
                                                ContactsContract.Contacts.DISPLAY_NAME};
                String selection = null;//ContactsContract.Contacts.HAS_PHONE_NUMBER + " = '" + ("1") + "'";
                String[] selectionArgs = null;
                String sortOrder = ContactsContract.Contacts.DISPLAY_NAME
                        + " COLLATE LOCALIZED ASC";

                ContentResolver contectResolver = getContentResolver();

                Cursor cursor = contectResolver.query(uri, projection, selection, selectionArgs,
                        sortOrder);

                //Create buffer
                final ArrayList<ContactData> bufferContacts = new ArrayList<ContactData>();

                //Load contacts one by one
                if(cursor.moveToFirst()) {
                    while(!cursor.isAfterLast()) {



                        String id = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts._ID));


                        String[] emailProj = new String[]{Email.DATA};
                        Cursor cursorEmail = contectResolver.query(Email.CONTENT_URI, emailProj,Email.CONTACT_ID + " = ? ", new String[] { id }, null);

                        String[] phoneProj = new String[]{ContactsContract.CommonDataKinds.Phone.NUMBER, ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME};
                        Cursor cursorPhone = contectResolver.query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, phoneProj,
                                ContactsContract.CommonDataKinds.Phone.CONTACT_ID + " = ?", new String[] { id }, null);

                        String firstName = "";
                        String lastName = "";
                        String email = "";
                        String displayname = "";
                        String phoneNmb = "";

                        if(cursorPhone.moveToFirst()) {
                            ///displayname = cursorPhone.getString(cursorPhone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME));
                            phoneNmb = cursorPhone.getString(cursorPhone.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER));
                        }
                        cursorPhone.close();

                        if(cursorEmail.moveToFirst()) {
                            email = cursorEmail.getString(cursorEmail.getColumnIndex(Email.DATA));
                        }
                        cursorEmail.close();

                        displayname = cursor.getString(cursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME));

                        //Divide display name to first and last
                        String[] names = displayname.split("\\s+");

                        firstName = displayname;

                        if(names.length >= 1) {
                            firstName = names[0];
                        }

                        if(names.length >= 2) {
                            firstName = names[1];
                        }

                        final ContactData contactData = new ContactData(id, firstName, lastName, phoneNmb, email, allChecked);

                        bufferContacts.add(contactData);

                        //Set list view initialy
                        runOnUiThread(new Runnable() {
                            public void run() {

                                if(contactsAdapter == null) {
                                    ArrayList<ContactData> contacts = new ArrayList<ContactData>();
                                    contactsAdapter = new ContactAdapter(ContactPickerActivity.this, contacts);

                                    lvContacts.setAdapter(contactsAdapter);
                                }

                                if(bufferContacts.size() >= BUFFER_INTERVAL) {
                                    addBuffer(bufferContacts);
                                }
                            }

                        });

                        cursor.moveToNext();
                    }
                }

                cursor.close();

                runOnUiThread(new Runnable() {
                    public void run() {

                        addBuffer(bufferContacts);

                    }

                });

如果您不想让一切从零开始,请随意使用我的现成库来选择多个联系人:

https://github.com/kgadzinowski/Android-Multiple-Contacts-Picker-Library

【讨论】:

  • 你还没有提到如何使用你的库和支持 gradle 它将易于使用和帮助。
猜你喜欢
  • 1970-01-01
  • 2018-01-09
  • 2013-01-16
  • 2023-01-05
  • 2015-02-19
  • 1970-01-01
  • 2011-03-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多