Мне нужно изменить язык во время выполнения на 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. После этого вызова они устанавливают свой макет и инициализируют свои настройки ...
Я думал, что мои строки кода сделают это. Но у меня есть следующая проблема: иногда активность меняет язык, а иногда нет!
Если я установил на нем точку останова отладки и после того, как программные паузы я нажимаю, все работает нормально. Поэтому я думаю, что в некоторых случаях, когда мое приложение «достаточно медленно», язык будет меняться правильно, тогда как язык не изменится, если приложение слишком быстро ...
Есть ли какие-либо решения моей проблемы ? Как я могу быть уверен, что мой язык изменится правильно в любое время?
Большое спасибо!
Edit: Вот пример для класса, который простирается от моего суперкласса
public class MainMenuActivity extends BaseActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_start);
}
}
Эй. Я добавил пример. Его просто вызвать onCreate и установить контент-представление. Иногда это работает, иногда это не так. Когда я устанавливаю точку останова в setContentView и продолжаю, она будет работать определенно – Frame91