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