2

在我的 android 应用程序中,我有一个 switch 小部件,我设置了一个这样的 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 更改状态之前,它将没有任何效果。

我需要一种取消开关的方法,所以如果我这样做了,就好像我从未点击过它一样。

4

1 回答 1

5

我会去,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());
        }
    }
});
于 2015-01-06T17:21:28.687 回答