Я нашел действительно странную ошибку, которая воспроизводится только на устройствах Android N.
В гастролях моего приложения есть возможность изменить язык. Вот код, который его изменяет.
public void update(Locale locale) {
Locale.setDefault(locale);
Configuration configuration = res.getConfiguration();
if (BuildUtils.isAtLeast24Api()) {
LocaleList localeList = new LocaleList(locale);
LocaleList.setDefault(localeList);
configuration.setLocales(localeList);
configuration.setLocale(locale);
} else if (BuildUtils.isAtLeast17Api()){
configuration.setLocale(locale);
} else {
configuration.locale = locale;
}
res.updateConfiguration(configuration, res.getDisplayMetrics());
}
Этот код отлично работает в действии моего тура (с вызовом recreate()
), но во всех последующих действиях все ресурсы String ошибочны. Вращение экрана исправляет его. Что я могу сделать с этой проблемой? Должен ли я менять локаль для Android N по-другому или это просто системная ошибка?
P.S. Вот что я нашел. При первом запуске MainActivity (который после моего тура) Locale.getDefault()
правильный, но ресурсы неправильные. Но в других действиях это дает мне неправильную локаль и неправильные ресурсы из этой локали. После поворота экрана (или, возможно, другого изменения конфигурации) Locale.getDefault()
будет правильным.