SwitchPreference не работает должным образом - почему так? - PullRequest
0 голосов
/ 02 июня 2019

Я использую Switch Preference в своих действиях по настройке, чтобы изменить тему приложения, но она не работает должным образом.Я не могу понять, что я делаю не так, вот мой код

Вот мой prefs.xml

    <SwitchPreference
        android:defaultValue="false"
        android:key="@string/pref_key_dark_mode"
        android:title="@string/pref_title_dark_mode"
        android:summary="@string/pref_summary_dark_mode"/>


</PreferenceCategory>

, а вот мое действие Настройки

  public class SettingsActivity extends AppCompatPreferenceActivity {
   @Override
   protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);

    // load settings fragment
       getFragmentManager().beginTransaction().replace(android.R.id.content, new MainSettingsFragment()).commit();
}

public static class MainSettingsFragment extends PreferenceFragment {
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        addPreferencesFromResource(R.xml.prefs_main);

        // Stuff to do with night mode switch
        final SwitchPreference nightMode = (SwitchPreference) findPreference(getString(R.string.pref_key_dark_mode));
        nightMode.setDefaultValue(false);
        nightMode.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
            @Override
            public boolean onPreferenceChange(Preference preference, Object newValue) {

                if (nightMode.isChecked()){
                    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
                    getActivity().recreate();
                    nightMode.setChecked(false);

                }else {

                       AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
                    getActivity().recreate();
                    nightMode.setChecked(true);
                }

                return false;
            }
        });
    }
}
}

И вот что я делаю в моем MainActivity.java

     private void setNightMode() {

    preferences = getPreferences(MODE_PRIVATE);
    if (preferences.getBoolean(getString(R.string.pref_key_dark_mode), true)) 
{

        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
    } else {
        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
    }
}

Я звоню setNightMode ();до создания и возврата

1 Ответ

0 голосов
/ 06 июня 2019

Попробуйте это должно помочь

final SwitchPreference nightMode = (SwitchPreference) findPreference(getString(R.string.pref_key_dark_mode));
            nightMode.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
                @Override
                public boolean onPreferenceChange(Preference preference, Object newValue) {

                if ((Boolean)newValue){
                        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
                    }else {
                        AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
                    }
                    getActivity().recreate();
            }
        });
...