【发布时间】:2016-03-11 11:14:25
【问题描述】:
所以我正在处理一个复选框列表。我正在使用 OnClickListener 来捕捉触摸事件。我也尝试过 OnTouch 监听器和 OnCheckChanged 监听器。我遇到的问题是复选框 IsChecked 的值在到达任何这些事件侦听器之前设置为 true。所以如果我要做这样的事情:
checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (checkBox.isChecked())
checkBox.setChecked(false);
}
});
它总是会点击这个 if 语句并立即将复选框设置为未选中,因为它在到达 OnClickListener 之前将其设置为 ischecked true。我发现的最简单的解决方法是:
checkBox.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
checkBox.setChecked(!checkBox.isChecked());
if (checkBox.isChecked()) {
checkBox.setChecked(false);
}
}
});
但这就是我所说的hackish。我看到的另一个选项是创建一个新的复选框类并覆盖 preformClick 方法。
@Override
public boolean performClick() {
toggle();
final boolean handled = super.performClick();
if (!handled) {
// View only makes a sound effect if the onClickListener was
// called, so we'll need to make one here instead.
playSoundEffect(SoundEffectConstants.CLICK);
}
return handled;
}
但这似乎比完成这项任务所需的工作量要多得多。
所以,基本上我的问题是:有没有一种方法可以在实际更改复选框之前覆盖和拦截复选框的设置?
【问题讨论】: