Язык обновления Android в действии предпочтений

В моем приложении для Android у меня есть действие предпочтений, которое позволяет пользователю переопределять язык приложения. Для этого я вызываю эту функцию в каждом действии onResume (), а затем сбрасываю представление содержимого:

    public static void checkOverrideSystemLanguage(Context context) {
    SharedPreferences prefs = PreferenceManager
            .getDefaultSharedPreferences(context);

    // Check if system's language setting needs to be overridden
    boolean overrideSystemLanguage = prefs.getBoolean(context
            .getString(R.string.pref_key_chkbx_override_system_language),
            false);

    if (overrideSystemLanguage) {

        // Get language selection and possible languages
        String localeString = prefs.getString(
                context.getString(R.string.pref_key_list_languages), "");
        List<String> possibleLanguages = Arrays.asList(context
                .getResources().getStringArray(
                        R.array.pref_values_list_languages));

        if (possibleLanguages.contains(localeString)) {

            // Change language setting in configuration
            Locale locale = new Locale(localeString);
            Locale.setDefault(locale);
            Configuration config = new Configuration();
            config.locale = locale;
            context.getResources().updateConfiguration(config,
                    context.getResources().getDisplayMetrics());
        }
        // Use default language
        else {
            overrideSystemLanguage = false;
        }
    }

    // Use default language
    if (!overrideSystemLanguage) {
        context.getResources().updateConfiguration(
                Resources.getSystem().getConfiguration(),
                context.getResources().getDisplayMetrics());
    }
}

В каждом действии она отлично работает. Однако в действии предпочтений, когда пользователь меняет язык, он не обновляется сразу, потому что нет метода setContentView (). Пользователь должен вернуться к предыдущему действию и снова запустить действие с настройками, чтобы увидеть, как отразилось изменение языка.

Я пробовал следующее в прослушивателе onPreferenceChange ():

  1. Обновление конфигурации, удаление и чтение настроек:

     checkOverrideSystemLanguage (this); 
     // Удаляем все настройки и добавляем их для обновления языка 
    getPreferenceScreen (). RemoveAll (); 
    addPreferencesFromResource (R.xml.preferences); 
     
  2. ​​Обновление конфигурации и вызов onCreate (null)

  3. Завершение и перезапуск действия

     finish (); 
    startActivity (new Intent (this, PreferencesActivity.class)); 
     

Спасибо за вашу помощь!

6
задан Oliver 17 October 2011 в 15:15
поделиться