Локаль Android случайным образом возвращается к значениям по умолчанию

у меня есть одно действие, и в onCreate я загружаю язык из настроек и устанавливаю языковой стандарт, подобный этому:

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

    String lang = PreferenceManager.getDefaultSharedPreferences(this).getString("locale", "en");
    Locale newLocale = new Locale(lang);
    Locale.setDefault(newLocale);

    Configuration config = new Configuration();
    config.locale = newLocale;

    final Resources res = getResources();
    res.updateConfiguration(config, res.getDisplayMetrics());
}

я также переопределяю onConfigurationChanged

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);

    String lang = PreferenceManager.getDefaultSharedPreferences(this).getString("locale", "en");
    Locale newLocale = new Locale(lang);
    Locale.setDefault(newLocale);

    Configuration config = new Configuration();
    config.locale = newLocale;

    final Resources res = getResources();
    res.updateConfiguration(config, res.getDisplayMetrics());
}

у меня есть ViewPager с FragmentPagerAdapter и тремя вкладками на Android 2.3.7. проблема в том, что иногда при переключении вкладок языковой стандарт приложения возвращается к английскому, поэтому с этого момента в пользовательском интерфейсе используются смешанные языки. я всегда создаю новые фрагменты для вкладок в методе адаптера getItem(). если я поверну устройство, язык снова будет правильным.

Я также пытался поместить android:configChanges="locale" в манифест и не переопределять onConfigurationChanged(), но результат тот же.

Хуже всего то, что это не воспроизводимо на 100%, это происходит только несколько раз, и у меня также есть отчеты об этом от пользователей. как только приложение запустится и оно не изменит локаль после переключения нескольких вкладок, оно будет работать правильно до выхода.

14
задан shelll 13 April 2012 в 10:21
поделиться