在listivew中选择Android复选框

时间:2015-09-29 09:03:19

标签: android listview checkbox contact

在我的Android应用程序中,我将移动设备中的联系人列表的所有详细信息存储到列表视图中,并添加了一个复选框以选择特定联系人..但选择复选框时出现问题,应用程序在选择时崩溃我给出下面的代码..如果有人可以帮助请帮助

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

                int count = listView.getCount();



                for(int i=0;i<count;i++) {
                    ViewGroup item = (ViewGroup) listView.getChildAt(i);
                    checkBox = ((CheckBox) item.findViewById(R.id.selected));

                    if(checkBox.isChecked()) {

                        Toast.makeText(SendMessagesActivity.this, "How are u", Toast.LENGTH_LONG)
                                .show();
                    }
                }


            }
        });

ContactsAdapter

public class ContactsAdapter extends BaseAdapter
{
    private Context context;
    private ArrayList<Contact> contacts;
    SparseBooleanArray sba=new SparseBooleanArray();

    public ContactsAdapter(Context context, ArrayList<Contact> contacts)
    {
        this.context = context;
        this.contacts = contacts;

    }




    public View getView(final int position, View convertView, ViewGroup parent) {

        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        View gridView;
        final ViewHolder mHolder;

        if (convertView == null)
        {

            convertView = inflater.inflate(R.layout.contact, null);
            mHolder = new ViewHolder();

            mHolder.textName     =(TextView) convertView.findViewById(R.id.name);
            mHolder.textMobile   =(TextView) convertView.findViewById(R.id.mobile);
            mHolder.textSelector =(CheckBox) convertView.findViewById(R.id.selected);



            convertView.setTag(mHolder);   


            }  


        else
        {
            mHolder = (ViewHolder) convertView.getTag();

        }

        mHolder.textMobile.setText(contacts.get(position).getMobile());
        mHolder.textName.setText(contacts.get(position).getName());
        mHolder.textName.setSelected(true);
        mHolder.textSelector.setChecked(sba.get(position));

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

                 if(mHolder.textSelector.isChecked())
                 {
                     sba.put(position, true);
                 }

                else
                {
                    sba.put(position, false);
                }

            }
        });

        return convertView;
    }




    private class ViewHolder
    {
        private TextView textMobile,textName;
        private CheckBox textSelector;
    }

    @Override
    public int getCount()
    {
        return contacts.size();
    }

    @Override
    public Object getItem(int position)
    {
        return null;
    }

    @Override
    public long getItemId(int position)
    {
        return 0;
    }

}

2 个答案:

答案 0 :(得分:0)

在您的联系人适配器中,您需要实施检查/取消选中,并相应地更改联系人的arraylist,

因此,点击按钮只需从Adpater获取值,然后查看所有选中的值。

答案 1 :(得分:0)

你可以点击

1.在Contact类中输入一个布尔变量

2.你实现的检查监听器只是你的布尔变量的位置设置标志是真/假。

3.现在你想要选择的项目只是为你的ArrayList联系人添加循环并在这里检查布尔变量你不需要从列表视图中获取视图并检查。

如果您有任何疑问,请随时询问