在我的Android应用程序中,我有一个切换小部件,我设置了一个这样的oncheckchange监听器
main.setOnCheckedChangeListener(new OnCheckedChangeListener() {
@Override
public void onCheckedChanged(CompoundButton arg0, boolean arg1) {
if (no_internet()) {
// cancel click...
return;
}
if (image.getApproved()) {
if (arg1) {
for(FishImage image : imagestoshow) {
image.setIsMain(false);
}
}
image.setIsMain(arg1);
}
}
});
基本上,如果有互联网,我会做一些事情,但如果没有互联网,那么我想取消对交换机的更改。现在,它将改变开关的状态。如果我尝试更改代码中的状态,因为此代码在android更改状态之前发生,它将无效。
我需要一种取消开关的方法,所以如果我这样做,就好像我从未点击过它。
答案 0 :(得分:4)
我会转而使用setOnClickListener(View.OnClickListener)
并抓住onClick(View)
回调。如果您不想完成点击,则只需toggle()
开关。
请勿使用onCheckedChanged(CompoundButton, boolean)
回调,因为您最终会通过调用toggle()
来获得无限循环。
示例强>
main.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View clickedView) {
// Cast to get access to Switch methods
Switch switchView = (Switch) clickedView;
if (no_internet()) {
switchView.toggle();
return;
}
if (image.getApproved()) {
if (switchView.isChecked()) {
for(FishImage image : imagestoshow) {
image.setIsMain(false);
}
}
image.setIsMain(switchView.isChecked());
}
}
});