【问题标题】:android Switch not toggling programmaticallyandroid Switch没有以编程方式切换
【发布时间】:2019-01-16 10:53:39
【问题描述】:

我正在尝试以编程方式将开关切换回关闭状态,但是我遇到了问题。

我尝试同时使用 myswitch.setischecked(false) 和 myswitch.toggle,它们都将开关保持在当前状态,但将背景从蓝色更改为灰色,因此 android 认为开关已关闭,但显示没有不反映这一点。

这是我的代码

  final Switch InstaPrint = (Switch) rootView.findViewById(R.id.instaprint);
        final Switch MyZebraSwitch = (Switch) rootView.findViewById(R.id.myzebraswitch);
        final Switch StockZebraSwitch = (Switch) rootView.findViewById(R.id.stockzebraswitch);
        final Switch StoreZebraSwitch = (Switch) rootView.findViewById(R.id.storezebraswitch);

        final Spinner MyZebraSpinner = (Spinner) rootView.findViewById(R.id.myzebraspinner);
        final Spinner StockZebraSpinner = (Spinner) rootView.findViewById(R.id.stockzebraspinner);
        final Spinner StoreZebraSpinner = (Spinner) rootView.findViewById(R.id.storezebraspinner);


        //InstantPrint

        InstaPrint.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if(InstaPrint.isChecked())
                {
                    if(!MyZebraSwitch.isChecked() && !StockZebraSwitch.isChecked() && !StoreZebraSwitch.isChecked())
                    {

                        Vibrator vib = (Vibrator) getActivity().getSystemService(Context.VIBRATOR_SERVICE);
                        vib.vibrate(1000);
                       // PlayFile("bell.mp3");
                        Toast toast = Toast.makeText(getActivity(), "You must select at least one printer", Toast.LENGTH_LONG);
                        toast.show();
                        InstaPrint.toggle();
                    }
                }
            }
        });

还有其他人遭受过这种情况吗?

编辑 - 在玩了之后,我发现更改设备的方向可以解决问题,我的开关包含在一个片段中,因此重绘片段似乎可以纠正它,现在只需要弄清楚如何以编程方式重绘!

【问题讨论】:

    标签: android android-switch


    【解决方案1】:

    在状态监听器中调用toggle()setChecked(boolean) 方法似乎有点违反直觉。我预计会出现某种无限循环或奇怪的行为,因为您以编程方式更改状态更改回调中的状态。我会尝试改用从View 类继承的setOnClickListener(View.OnClickListener) 方法。

    【讨论】:

    • 这比评论要好,答案值得打分,发现正确并解决了我的问题
    • @dave 方向改变解决了你的问题这一事实也支持了我的期望。杀死活动以及您的片段并重新绘制它们(每次方向更改都会发生这种情况)将杀死我怀疑正在发生的无限循环过程。我会尝试解决问题,而不是每次都重新绘制片段。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-17
    • 2011-09-27
    • 2012-02-01
    • 2019-05-07
    • 1970-01-01
    • 2015-09-04
    相关资源
    最近更新 更多