SwitchPreference无法正常工作-为什么如此?

时间:2019-06-02 16:32:57

标签: android sharedpreferences preferences preferenceactivity android-night-mode

我在喜好活动中使用“切换首选项”来更改应用程序主题,但是它无法正常工作。我不知道我在做什么错,这里是我的代码

这是我的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();在创建和onResume之前

1 个答案:

答案 0 :(得分:0)

尝试此操作应该有帮助

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