如何撤消android开关中的点击?

ome*_*ega 2 android android-switch

在我的 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);
                    }
                }
            });
Run Code Online (Sandbox Code Playgroud)

基本上,如果有互联网,我会做一些事情,但如果没有,那么我想取消对交换机的更改。现在,它将改变开关的状态。如果我尝试更改代码中的状态,由于此代码发生在 android 更改状态之前,因此不会产生任何效果。

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

ste*_*eve 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());
        }
    }
});
Run Code Online (Sandbox Code Playgroud)