Сохранять текущие sharedPreferences при изменении языка локали Android - PullRequest
0 голосов
/ 09 июня 2019

Когда я меняю локаль / язык моего телефона, мои параметры (выбранная тема и целевой язык для функции перевода), которые сохраняются в sharedPreference, превращаются в значения по умолчанию.Например, значениями предпочтений по умолчанию являются «легкие» для темы и «en» для целевого языка.Я изменяю настройки как «темные» для темы и «де» для целевого языка.Если я изменил языковой стандарт в настройках, предпочтение темы изменится на «легкое», а предпочтение языка перевода снова станет «en».Как я могу предотвратить это изменение?

Я уже пробовал метод onConfigurationChanged (), но он срабатывает только во время выполнения действия.Он не запускается при изменении языкового стандарта, когда действие не выполняется.

Вот метод onPreferenceChange (Preference Preference, Object value):

        String stringValueLanguage = value.toString();
        preference.setSummary(stringValueLanguage);

        switch (stringValueLanguage) {

            //Language selection preference is set according to different locales:
            case LanguagesEN.Constants.ENGLISH_VALUE:
            case LanguagesTR.Constants.ENGLISH_VALUE:
            case LanguagesDE.Constants.ENGLISH_VALUE:
            case LanguagesES.Constants.ENGLISH_VALUE:
            case LanguagesFR.Constants.ENGLISH_VALUE:
                language = LanguageCodes.Constants.ENGLISH_CODE_VALUE;
                break;

            case LanguagesEN.Constants.TURKISH_VALUE:
            case LanguagesTR.Constants.TURKISH_VALUE:
            case LanguagesDE.Constants.TURKISH_VALUE:
            case LanguagesES.Constants.TURKISH_VALUE:
            case LanguagesFR.Constants.TURKISH_VALUE:
                language = LanguageCodes.Constants.TURKISH_CODE_VALUE;
                break;

            case (LanguagesEN.Constants.GERMAN_VALUE):
            case (LanguagesTR.Constants.GERMAN_VALUE):
            case (LanguagesDE.Constants.GERMAN_VALUE):
            case (LanguagesES.Constants.GERMAN_VALUE):
            case (LanguagesFR.Constants.GERMAN_VALUE):
                language = LanguageCodes.Constants.GERMAN_CODE_VALUE;
                break;

            case (LanguagesEN.Constants.FRENCH_VALUE):
            case (LanguagesTR.Constants.FRENCH_VALUE):
            case (LanguagesDE.Constants.FRENCH_VALUE):
            case (LanguagesES.Constants.FRENCH_VALUE):
            case (LanguagesFR.Constants.FRENCH_VALUE):
                language = LanguageCodes.Constants.FRENCH_CODE_VALUE;
                break;

            case (LanguagesEN.Constants.SPANISH_VALUE):
            case (LanguagesTR.Constants.SPANISH_VALUE):
            case (LanguagesDE.Constants.SPANISH_VALUE):
            case (LanguagesES.Constants.SPANISH_VALUE):
            case (LanguagesFR.Constants.SPANISH_VALUE):
                language = LanguageCodes.Constants.SPANISH_CODE_VALUE;
                break;

        }

        //User's language preference is saved in order to be used in TranslateActivity:
        SharedPreferences myLanguagePrefs = getActivity().getSharedPreferences(languageKey, MODE_PRIVATE);
        SharedPreferences.Editor prefsEditorLanguage = myLanguagePrefs.edit();
        prefsEditorLanguage.putString(languageIdKey, language);
        prefsEditorLanguage.commit();


        //THEME_KEY
        String stringValueTheme = value.toString();
        preference.setSummary(stringValueTheme);

        //User's theme preference is saved in order to used in other Activities:
        SharedPreferences myThemePrefs = getActivity().getSharedPreferences(themeKey, MODE_PRIVATE);
        SharedPreferences.Editor prefsEditorTheme = myThemePrefs.edit();

        switch (stringValueTheme) {

            case (Themes.Constants.LIGHT):

                theme = Themes.Constants.LIGHT;
                prefsEditorTheme.putString(themeIdKey, theme);
                prefsEditorTheme.commit();

                restartSettingsActivityAfterThemeSelection();

                break;

            case (Themes.Constants.DARK):

                theme = Themes.Constants.DARK;
                prefsEditorTheme.putString(themeIdKey, theme);
                prefsEditorTheme.commit();

                restartSettingsActivityAfterThemeSelection();
                break;

        }

        return true;
    }

}

1 Ответ

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

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

...