选中复选框时,会检查Android列表视图中的多个项目

时间:2015-09-03 14:53:17

标签: android checkbox android-listview

我正在创建一个发送联系人的应用程序。我在列表视图中显示了联系人详细信息,其中使用了带有名称编号的自定义适配器和一个复选框。问题是,当我选中一个复选框时,随机复选框也会在列表中被选中。我在这里提到了很多问题而且还没有工作

在适配器类中填充列表的方法是

@Override
public View getView(int position, View convertView, ViewGroup parent) {
    ContactsBean contact = contacts.get(position);
    ViewHolder holder = null;
    if (convertView == null) {
        LayoutInflater inflater = (LayoutInflater) mainActivity
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

        convertView = inflater.inflate(R.layout.list_layout, null);
        holder = new ViewHolder();
        holder.number = (TextView) convertView.findViewById(R.id.numberTextView);
        holder.name = (TextView) convertView.findViewById(R.id.nameTextView);
        holder.box = (CheckBox) convertView.findViewById(R.id.checkBox);
        convertView.setTag(holder);
    } else {
        holder = (ViewHolder) convertView.getTag();
    }
    holder.name.setText(contact.getName());
    holder.number.setText(contact.getNumber().get(0));
    holder.name.setTag(contact);
    holder.box.setTag(contact);
    holder.box.setOnClickListener(this);
    holder.box.setSelected(contact.isSelect());
    return convertView;
}

@Override
public void onClick(View v) {
    if (v.getId() == R.id.checkBox) {
        ContactsBean bean = (ContactsBean) v.getTag();
        bean.setSelect(!bean.isSelect());
        notifyDataSetChanged();
    }
}

private static class ViewHolder {
    public TextView number;
    public TextView name;
    public CheckBox box;
}

1 个答案:

答案 0 :(得分:0)

您应该调用holder.box.setChecked(contact.isSelect());而不是setSelected()来正确重置CheckBox是否已被选中。

选中的状态不会影响是否选中此框。