我创建了一个自定义expandablelistadapter,以便在单击childrow时正确处理我的复选框。我在复选框中添加了一个OnCheckedChangeListener,并将我想要操作的项目作为标记传递。当我点击的视图被回收时(我相信),奇怪的事情开始发生。我扩展了一个父项,然后标记我的孩子,这工作正常,然后当我折叠父项并展开另一个父项时,我点击了之前单击的子项的OnCheckedChangeListener。这不是真的一致,有时候效果很好,但有时却没有。
是什么让我的复选框改变状态,我该如何避免它? 它工作正常,这些"随机"国家的变化。
@Override
public View getChildView(int groupPosition, int childPosition, boolean isLastChild, View convertView, ViewGroup parent) {
convertView = mLayoutInflater.inflate(R.layout.site_picker_list_item_child1, null);
CheckBox checkbox = (CheckBox) convertView.findViewById(R.id.site_test_child_selected);
final ObjectA obj = getChild(groupPosition, childPosition);
checkbox.setTag(obj);
checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton checkbox, boolean isChecked) {
((ObjectA)checkbox.getTag()).selected = isChecked;
if (isChecked)
Log.d(TAG, "CHECKED: " + ((ObjectA)checkbox.getTag()).name);
else
Log.d(TAG, "UNCHECKED: " + ((ObjectA)checkbox.getTag()).name);
notifyDataSetChanged();
}
});
return convertView;
}
public class ObjectA {
String name = "Hello";
Boolean selected = false;
}
答案 0 :(得分:1)
一个简单的解决方案是在设置选中之前删除侦听器,例如:
checkbox.setOnCheckedChangeListener(null);
checkBox.setChecked(obj.checked);
checkbox.setOnCheckedChangeListener(this);
答案 1 :(得分:0)
您需要在ObjectA类中保持选中状态
例如
class ObjectA{
boolean checked;
}
在getView方法中
final ObjectA obj = getChild(groupPosition, childPosition);
checkbox.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton checkbox, boolean isChecked){
obj.checked = isChecked;
}
});
checkBox.setChecked(obj.checked);