有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java开关setOnCheckedChangeListener在用户输入后循环

我试图使用片段中的开关立即切换到暗模式(无需重新加载)

我用来做这件事的代码是

AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);

这是工作在测试中,但我希望它改变到黑暗模式使用开关,所以我的代码如下

switch_us_dark_mode.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                if (isChecked) {
                    // The toggle is enabled
                    Log.i("tag", "Hit Dark");
                    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
                    editor.putString("theme", "dark");
                }

                if(!isChecked){
                    // The toggle is disable
                    Log.i("tag", "Hit Light");
                    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
                    editor.putString("theme", "light");
                }
            }
        });

然而,在我第一次点击开关后,这是一个循环。 enter image description here

我试着在一个线程上运行它,但它给了我一个错误,说它必须在主线程上运行

我会把开关移到按钮下面,这样它看起来不像是表单的一部分,但那不是重点

enter image description here

提前谢谢


共 (1) 个答案

  1. # 1 楼答案

    使用以下代码:

    switch_us_dark_mode.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
                public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                    if (buttonView.isPressed()) {
                        // The toggle is enabled
                        Log.i("tag", "Hit Dark");
                        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
                        editor.putString("theme", "dark");
                    } else {
                        // The toggle is disable
                        Log.i("tag", "Hit Light");
                        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
                        editor.putString("theme", "light");
                    }
                }
            });
    

    使用“buttonView.isPressed()”而不是isChecked。希望能奏效

    您也可以使用复选框而不是开关,并将drawable设置为该复选框,但前提是上述操作失败