Переключить цикл setOnCheckedChangeListener после ввода пользователем - PullRequest
0 голосов
/ 04 августа 2020

Я пытаюсь немедленно переключиться в темный режим (без перезагрузки) с помощью переключателя во фрагменте.

Фрагмент кода, который я использую для этого:

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

I tried doing it on a thread but it threw me an error saying it must be run on the main thread.

I will move the switch below the button so that it doesnt look like its part of the form but thats besides the point.

введите описание изображения здесь

Заранее спасибо!

1 Ответ

0 голосов
/ 04 августа 2020

Используйте приведенный ниже код:

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. Надеюсь, это сработает.

Вы также можете использовать Checkbox вместо Switch и установить для него возможность рисования, но только в случае сбоя выше.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...