0

在我的应用程序中,我有一个设置活动,可以将应用程序更改为暗模式SwitchPreference并且当偏好应用程序发生变化时移动到MainActivity- 父活动和MainActivityrecyclerView 项目被复制。

设置活动

public class SettingsActivity extends AppCompatActivity {

    // same as defined in preference.xml file.
    public static final String TAG = "Debug";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        getSupportFragmentManager().beginTransaction()
                .replace(android.R.id.content, new SettingsFragment())
                .commit();
    }

    public static class SettingsFragment extends PreferenceFragmentCompat {
        @Override
        public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
            setPreferencesFromResource(R.xml.preferences, rootKey);
            SwitchPreference switchPreferenceCompat = findPreference(getString(R.string.key_dark_mode));

            assert switchPreferenceCompat != null;
            switchPreferenceCompat.setOnPreferenceChangeListener((preference, newValue) -> {
                boolean isChecked = false;
                if (newValue instanceof Boolean)
                    isChecked = (Boolean) newValue;
                if (isChecked) {
                    getPreferenceManager().getSharedPreferences().edit().putBoolean(getString(R.string.key_dark_mode), true).apply();
                    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
                    
                    Log.d(TAG, "onCreatePreferences: NIGHT mode on");
                } else {
                    getPreferenceManager().getSharedPreferences().edit().putBoolean(getString(R.string.key_dark_mode), false).apply();
                    AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
                    
                    Log.d(TAG, "onCreatePreferences: nightmode off");
                }
                return true;
            });
        }
    }
}

这是我在主要活动中的阅读方式:

主要活动

protected void onCreate(Bundle savedInstanceState) {

        PreferenceManager.setDefaultValues(this, R.xml.preferences, false);
       
        SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
        boolean switchPref = sharedPref.getBoolean(getString(R.string.key_dark_mode), false);
        //Toast.makeText(this, Boolean.toString(switchPref), Toast.LENGTH_SHORT).show();
        if (switchPref) {
            AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
            //setTheme(R.style.NightMode);
        } else {
            AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
            //setTheme(R.style.AppTheme);
        }

        super.onCreate(savedInstanceState);

我什至尝试MainActivity在没有PreferenceManager的情况下仍然重复 recyclerView 中的项目。

4

0 回答 0