我有一个自定义ExpendableListViewAdapter
。就像这样:Android儿童CheckBox的不正确行为
- 集团
- 儿童
- 儿童
- 儿童
- 集团
他所有的团体和孩子的有复选框。
我希望父母CheckBox
当他所有的孩子被检查时动态检查自己。
如何实现这个?
我已经实现了选择儿童,然后选择父元素。
这是我的方法就可以了:
void selectGroup(boolean isSelected) {
for (Item itemChild : item.getItems()) {
if (isSelected) itemChild.isSelected = true;
else itemChild.isSelected = false;
itemChild.setSelected(isSelected);
}
notifyDataSetChanged();
}
我召唤它里面getGroupView
:
holder.cbChild.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
item.isSelected = isChecked;
item.setSelected(isChecked);
if (getChildrenCount(groupPosition) != 0) {
selectGroup(item.isSelected);
}
}
});
,它工作正常。
我试着实现家长选择以及。
方法:
public boolean isAllChildrenSelected(int groupPosition) {
int selectedNumber = 0;
for (int i = 0; i < getChildrenCount(groupPosition); i++) {
Item itemChild = getChild(groupPosition, i);
if (itemChild.isSelected) {
selectedNumber++;
}
}
if (selectedNumber == getChildrenCount(groupPosition)) {
notifyDataSetChanged();
return true;
} else return false;
}
我召唤这种方法我getGroupView
里面还有:
if (getChildrenCount(groupPosition) != 0) {
if (isAllChildrenSelected(groupPosition)) {
holder.cbChild.setChecked(true);
}
}
,然后在里面getChildView
为setOnCheckedChangeListener
孩子CheckBox
我召唤notifyDataSetChanged();
。
但我收到了一些奇怪的行为 - 例如,如果组有3个孩子,我试图选择第一个,它选择第二和第三。
我认为,这是因为我把notifyDataSetChanged();
放在了一个错误的地方,但我无法弄清楚究竟在哪里以及如何解决它。
item.isSelected = isChecked; item.setSelected(isChecked); 这不是多余的?如果它是相同的(更新相同的字段)第一个方法selectGroup(),你应该有一个llok,因为如果条件没有{},它可能会给你一个奇怪的/无意的行为 –