我有一个列表视图,每个列表项都包含一个复选框。
我的列表适配器正在按照建议重新使用视图,因此必须设置复选框的状态。它通过调用setChecked()
来完成此操作。这会导致调用我的onCheckedChanged()
方法。没问题,但是当用户实际点击复选框时,会调用相同的方法。
这里的问题是我想做一些不同的事情,具体取决于点击来自实际点击,还是程序化调用setChecked()
我考虑过覆盖onClick()
并在该方法中设置标记,但不幸的是onClick()
在 onCheckedChanged()
之后被称为
所以我可以根据需要发布代码,但基本的问题是,如何区分更改复选框状态的物理点击和程序化复选框状态更改?
答案 0 :(得分:1)
我过去做过这种方式的方法是在复选框'owner上有一个布尔属性,例如一个表单,通常称为suppress。
然后在事件处理程序退出时如果它是真的,并且当我想设置属性以编程方式设置suppress时,更改属性,重置禁止。 PIA但它的确有效。
答案 1 :(得分:1)
答案有点盯着我的脸。我已将部分代码从onCheckedChanged()
移动到onClick()
,但在以编程方式设置复选框状态时不会调用该代码。
@Override
public void onClick(View view) {
boolean isChecked = ((CheckBox)view).isChecked();
if (isChecked) {
// do something
}
else {
// do something else
}
}