取消选中所有列表视图复选框

时间:2017-02-20 05:48:54

标签: android listview android-checkbox

我有一个自定义列表视图,用于显示联系人的姓名和手机号码。列表视图具有行布局中的复选框以及“全选”标题复选框。当我选择标题复选框时,将检查所有列表视图复选框(除了那些在其编号之前没有+符号的复选框)。现在的问题是当我取消选中标题复选框时,我无法取消选中它们。

cannot convert from List<List<Person>> to List<Person>

2 个答案:

答案 0 :(得分:1)

你应该这样改变它。

holder.chkbox.setChecked(item.isChecked());

if(item.isChecked())
    holder.chkbox.setChecked(item.isChecked());
else
    holder.chkbox.setEnabled(false);

在适配器类中。

  

您必须在主要活动中尝试selectAll复选框。而它的倾听者   太。因为selectAll在适配器类中不需要。在活动中   选择所有侦听器后使用适配器,因为修改后的数据应该   转到适配器

修改

如果要取消选择是否取消选中任何项目,请使用

在getView()

if(item.isChecked()) {
            holder.chkbox.setEnabled(true);
            holder.chkbox.setChecked(item.isChecked());
            notifyDataSetChanged();
        }else{

            if(item.isPlus()){
                holder.chkbox.setEnabled(true);
                holder.chkbox.setChecked(item.isChecked());

            }else{

                holder.chkbox.setChecked(false);
            }
            notifyDataSetChanged();

        }
     holder.chkbox.setTag(position);


holder.chkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
        @Override
        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if(isChecked){
                if(!item.isPlus()){
                    if(!selectAll.isChecked()){
                        holder.chkbox.setChecked(false);
                        Toast.makeText(mContext, "Please add +", Toast.LENGTH_SHORT).show();
                    }else{
                        holder.chkbox.setChecked(false);
                        Toast.makeText(mContext, "Please add + before", Toast.LENGTH_SHORT).show();
                    }

                }
            }
        }
    });

根据sammy的帮助和建议

答案 1 :(得分:0)

更改了setOnCheckedChangeListener

        selectAll.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                System.out.println("sammy_SelectAllBox "+isChecked);
                System.out.println("Total Size: "+getCount());
                System.out.println("Checked Size: "+getCheckedCount());
                if(isChecked){
                    for(int i=0;i<arrayList.size();i++){
                        arrayList.get(i).setChecked(false);
                    }
                    selectAll.setText("Unselect All");
                }else{
                    for(int i=0;i<arrayList.size();i++){
                      arrayList.get(i).setChecked(true);
                    }
                    selectAll.setText("Select All");
                }
                notifyDataSetChanged();

            }
        });