Изменить язык во время выполнения в Android
Я должен изменить язык во время выполнения в Android (да, я знаю, что это нехорошее поведение, но это требование ...).
Итак, у меня есть базовый класс, с которого начинается каждое занятие. Этот класс имеет следующую функцию:
public static void changeLanguage(Context context) {
Resources res = context.getResources();
/*
* Change locale settings in the app.
*/
DisplayMetrics dm = res.getDisplayMetrics();
/*
* Store and load data in this preferences
*/
android.content.res.Configuration conf = res.getConfiguration();
String[] localArray = res.getStringArray(R.array.language_short_array);
if (localArray != null) {
SharedPreferences settings = context.getSharedPreferences(
MyService.APP_ID, MODE_PRIVATE);
conf.locale = new Locale(localArray[settings.getInt(
PREFERED_LANGUAGE_KEY, 0)]);
res.updateConfiguration(conf, dm);
}
}
Я вызову этот метод в onCreate:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
changeLanguage(this);
}
Это в суперклассе. Моя деятельность начинается с него и сначала вызывается super.onCreate. После этого вызова они устанавливают свой макет и инициализируют свои настройки ...
Я думал, что мои строки кода сделают это. Но у меня есть следующая проблема: иногда деятельность меняет язык, а иногда нет!
Если я установил на нем точку останова отладки и после паузы программы нажимаю продолжить, все работает нормально. Поэтому я думаю, что в некоторых случаях, когда мое приложениедостаточно медленно, язык изменится правильно, тогда как язык выигрализменить, если приложение слишком быстро ...
Есть ли решение моей проблемы? Как я могу быть уверен, что мой язык изменится правильно в любое время?
Большое спасибо!
Изменить: Вот пример для класса, который выходит из моего суперкласса
public class MainMenuActivity extends BaseActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_start);
}
}