如何获得检查联系人列表? [英] How to get list of checked contacts?

查看:106
本文介绍了如何获得检查联系人列表?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已得到手机通讯录联系人列表。我创建了一个带有复选框的自定义视图,以从列表中选择多个联系人。

I have got a contacts list from phone contacts. I have created a custom view with a check box to select multiple contacts from the list.

现在我得到了与复选框列表中的联系人。现在我想将选中的联系人的名单并发送在另一活动。

Now I get the contacts in the list with the check boxes. Now I want to make an list of selected contacts and send the in another activity.

我怎样才能选择联系人列表?

How Can I get the list of selected contacts?

更新code:

 public class ContactList extends AppCompatActivity {


private ArrayList<contact> contact_list = null;
private contactAdapter mContactAdapter = null;

private ArrayList<contact> items;
private ArrayList<contact> selectedContacts;
boolean[] isChecked;
Cursor mCursor;
ListView lv;
public int RQS_PICK_CONTACT = 1;
private static final int PERMISSIONS_REQUEST_READ_CONTACTS = 100;
List<Integer> selectedItemsPositions;
private ImageView done;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    setContentView(R.layout.activity_contacts_list);

    Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);

    toolbar.setTitle("");
    TextView toolbarTitle = (TextView) toolbar.findViewById(R.id.toolbar_title);

    toolbarTitle.setText("Select Contacts");

    setSupportActionBar(toolbar);

    done = (ImageView)findViewById(R.id.done);

    contact_list = new ArrayList<contact>();

    selectedContacts = new ArrayList<contact>();

    selectedItemsPositions = new ArrayList<>();

    lv = (ListView)findViewById(R.id.list);

    showContacts();

    //getContacts();


    done.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {


            Intent i = new Intent();

            Bundle bundle = new Bundle();
        //    bundle.putParcelableArrayList("selectedContacts",selectedItemsPositions);

            i.putExtras(bundle);

            setResult(RESULT_OK, i);

            finish();


        }
    });

}

@SuppressWarnings("unused")
private void getContacts() {


    String[] projection = new String[] {
            ContactsContract.Contacts.DISPLAY_NAME,
            ContactsContract.Contacts.HAS_PHONE_NUMBER,
            ContactsContract.Contacts._ID };


    mCursor = managedQuery(ContactsContract.Contacts.CONTENT_URI, null, null, null,null);

    while (mCursor.moveToNext()) {
        contact contact = new contact();

        String contactId = mCursor.getString(mCursor.getColumnIndex(ContactsContract.Contacts._ID));

        contact.setContactid(mCursor.getString(mCursor.getColumnIndex(ContactsContract.Contacts._ID)));
        contact.setContactName(mCursor.getString(mCursor.getColumnIndex(ContactsContract.Contacts.DISPLAY_NAME)));
        contact_list.add(contact);
    }
    isChecked = new boolean[mCursor.getCount()];

    for (int i = 0; i < isChecked.length; i++) {
        isChecked[i] = false;
    }


    this.mContactAdapter = new contactAdapter(this, R.layout.contact_list_item, contact_list);
    lv.setAdapter(this.mContactAdapter);
 //   mCursor.close();

}


@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    // TODO Auto-generated method stub
    super.onActivityResult(requestCode, resultCode, data);

    if (requestCode == RQS_PICK_CONTACT) {
        if (resultCode == RESULT_OK) {

            getContacts();

        }
    }
}

public class contactAdapter extends ArrayAdapter<contact> {

    public contactAdapter(Context context, int textViewResourceId, ArrayList<contact> items1) {
        super(context, textViewResourceId, items1);
        items = items1;
    }

//to store all selected items position

    @Override
    public View getView(final int position, View convertView, ViewGroup parent) {
        final ViewHolder mViewHolder;

        if (convertView == null) {
            mViewHolder = new ViewHolder();
            LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            convertView = vi.inflate(R.layout.contact_list_item, parent, false);
            mViewHolder.cb = (CheckBox) convertView.findViewById(R.id.checkBox);
            mViewHolder.name = (TextView) convertView.findViewById(R.id.name);

            mViewHolder.cb.setOnCheckedChangeListener(new OnCheckedChangeListener() {

                @Override
                public void onCheckedChanged(CompoundButton buttonView, boolean ischecked) {
                    int position = (int) mViewHolder.cb.getTag();
                    if (ischecked) {
                        //check whether its already selected or not
                        if (!selectedItemsPositions.contains(position))
                            selectedItemsPositions.add(position);
                    } else {
                        //remove position if unchecked checked item
                        selectedItemsPositions.remove((Object) position);
                    }
                }
            });

            convertView.setTag(mViewHolder);
        } else {
            mViewHolder = (ViewHolder) convertView.getTag();
        }

        contact contacts = items.get(position);
        mViewHolder.cb.setTag(position);

        if (selectedItemsPositions.contains(position))
            mViewHolder.cb.setChecked(true);
        else
            mViewHolder.cb.setChecked(false);

        mViewHolder.name.setText(contacts.getContactName());

        Log.d("selectd",String.valueOf(selectedItemsPositions));
        return convertView;
    }


    public class ViewHolder {
        CheckBox cb;
        TextView name;
    }
}

任何人都可以在这方面帮助吗?谢谢。

Can anyone help with this please? Thank you..

推荐答案

随着ListView控件重新使用的意见,你总是需要设置标签复选框来知道哪些项目正是用户点击。试试这个

As ListView re-uses the views, you always need to set tags for CheckBox to know which item exactly user clicked. Try this

List<Integer> selectedItemsPositions;//to store all selected items position
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
    ViewHolder mViewHolder;

    if (convertView == null) {
        mViewHolder = new ViewHolder();
        LayoutInflater vi = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = vi.inflate(R.layout.contact_list_item, parent, false);
        mViewHolder.cb = (CheckBox) convertView.findViewById(R.id.checkBox);
        mViewHolder.name = (TextView) convertView.findViewById(R.id.name);

        mViewHolder.cb.setOnCheckedChangeListener(new OnCheckedChangeListener() {

            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean ischecked) {
                int position = (int) compoundButton.getTag();
                if (ischecked) {
                    //check whether its already selected or not
                    if (!selectedItemsPositions.contains(position))
                        selectedItemsPositions.add(position);
                } else {
                    //remove position if unchecked checked item
                    selectedItemsPositions.remove((Object) position);
                }
            }
        });

        convertView.setTag(mViewHolder);
    } else {
        mViewHolder = (ViewHolder) convertView.getTag();
    }

    contact contacts = items.get(position);
    mViewHolder.cb.setTag(position);

    if (selectedItemsPositions.contains(position))
        mViewHolder.cb.setChecked(true);
    else
        mViewHolder.cb.setChecked(false);

    mViewHolder.name.setText(contacts.getContactName());
    return convertView;
}

public class ViewHolder {
    CheckBox cb;
    TextView name;
}

如何获得唯一入选的项目联系对象

how to get only selected item contact objects

List<contact> selectedItems = new ArrayList<>();//to store selected items

        for (Integer pos : selectedItemsPositions) {
            selectedItems.add(items.get(pos));
        }

happyCoding;

这篇关于如何获得检查联系人列表?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆