Я пытаюсь изменить тему своего приложения, когда возвращаюсь к активности из Activity.Android change theme on result activity
Измените тему, после чего тема приложения должна измениться. К сожалению, этого не происходит. Когда я перехожу назад и вперед между настройками и MainActivity, ничего не происходит. Я не заканчиваю MainActivity, но заканчиваю действие настроек.
Главная -> Настройки, изменение темы (Тема не меняется) -> Вернуться к Main (Ничего не изменилось) -> Настройки (Еще не изменилась) -> Main (Это изменило)
Я надеваю Не знаю, как изменить его сразу, и я использую метод recreate(), но он все еще не работает.
SettingsActivity:
public class GeneralPreferenceFragment extends PreferenceFragment {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.pref_general);
setHasOptionsMenu(true);
// Bind the summaries of EditText/List/Dialog/Ringtone preferences
// to their values. When their values change, their summaries are
// updated to reflect the new value, per the Android Design
// guidelines.
//bindPreferenceSummaryToValue(findPreference("themeChanger"));
//bindPreferenceSummaryToValue(findPreference("example_list"));
SharedPreferences prefs = getSharedPreferences("theming", MODE_PRIVATE);
String themer = prefs.getString("themeID", "0");
val = themer;
Preference.OnPreferenceChangeListener pop = new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object o) {
String stringValue = o.toString(); //the value set in the strings.xml
String preferenceKey = preference.getKey(); //the key set in the actual xml file
Log.e("Settings " + preference.getKey(), "Clicked " + o);
setThemed();
checkValues();
if (preference instanceof ListPreference) {
// For list preferences, look up the correct display value in
// the preference's 'entries' list.
ListPreference listPreference = (ListPreference) preference;
int index = listPreference.findIndexOfValue(stringValue);
// Set the summary to reflect the new value.
preference.setSummary(
index >= 0
? listPreference.getEntries()[index]
: null);
if(preferenceKey.equalsIgnoreCase("themeChanger")) {
//setThemed();
}
if(!val.equals(stringValue)) {
Log.e("Settings2 " + preference.getKey(), "Clicked2 " + o);
}
} else {
// For all other preferences, set the summary to the value's
// simple string representation.
preference.setSummary(stringValue);
}
return true;
}
};
findPreference("themeChanger").setOnPreferenceChangeListener(pop);
pop.onPreferenceChange(findPreference("themeChanger"),
PreferenceManager
.getDefaultSharedPreferences(findPreference("themeChanger").getContext())
.getString(findPreference("themeChanger").getKey(), ""));
}
public void setThemed() {
SharedPreferences prefs = getSharedPreferences("theming", MODE_PRIVATE);
String themer = prefs.getString("themeID", "0");
setTheme(themer.equals("2") ? R.style.NightTheme1 : R.style.LightTheme);
}
private void checkValues() {
SharedPreferences sharedPrefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
String themed = sharedPrefs.getString("themeChanger", "0");
SharedPreferences.Editor editor = getSharedPreferences("theming", MODE_PRIVATE).edit();
editor.putString("themeID", themed);
editor.apply();
}
ли 'lastTheme' поле INT или тему? – Zefyr
это не имеет значения, но я думаю, что int было бы проще реализовать. – marmor
Я пробовал это, и я все еще получаю ту же проблему. – Zefyr