如何撤消在android开关中单击?

时间:2014-08-01 23:24:23

标签: 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);
                    }
                }
            });

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

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

1 个答案:

答案 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());
        }
    }
});