如何区分物理复选框点击和调用setChecked()?

时间:2013-12-23 18:32:46

标签: java android android-listview

我有一个列表视图,每个列表项都包含一个复选框。

我的列表适配器正在按照建议重新使用视图,因此必须设置复选框的状态。它通过调用setChecked()来完成此操作。这会导致调用我的onCheckedChanged()方法。没问题,但是当用户实际点击复选框时,会调用相同的方法。

这里的问题是我想做一些不同的事情,具体取决于点击来自实际点击,还是程序化调用setChecked()

我考虑过覆盖onClick()并在该方法中设置标记,但不幸的是onClick()onCheckedChanged()之后被称为

所以我可以根据需要发布代码,但基本的问题是,如何区分更改复选框状态的物理点击和程序化复选框状态更改?

2 个答案:

答案 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
    }
}