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