我在我的应用程序的设置菜单中创建了一些包含几种语言的ListPreference。我使用以下代码根据用户选择更改语言:
findPreference("language_list").setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
String loadLanguage = (String) newValue;
Locale locale = null;
if (loadLanguage.equals("en")) {
locale = new Locale("en");
} else if (loadLanguage.equals("ku")) {
locale = new Locale("ku");
} else if(loadLanguage.equals("ar")){
locale = new Locale("ar");
}else if(loadLanguage.equals("tr")){
locale = new Locale("tr");
}
else if(loadLanguage.equals("fr")){
locale = new Locale("fr");
}
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getActivity().getResources().updateConfiguration(config,
getActivity().getResources().getDisplayMetrics());
return true;
}
});
代码有效,但需要重新启动应用程序(退出并再次启动),直到完全完成语言更改。使用上面的代码,应用程序的某些部分将保留,即使它们不起作用也不会更改。
你可以告诉我我该怎么办?谢谢
答案 0 :(得分:0)
您可以以hacky方式以编程方式重新启动应用程序,如@Oleg Koshin here
所述答案 1 :(得分:0)
您可以致电
recreat();
完成语言更改后。
赞:
findPreference("language_list").setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override public boolean onPreferenceChange(Preference preference, Object newValue) {
String loadLanguage = (String) newValue;
Locale locale = null;
if (loadLanguage.equals("en")) {
locale = new Locale("en");
} else if (loadLanguage.equals("ku")) {
locale = new Locale("ku");
} else if(loadLanguage.equals("ar")){
locale = new Locale("ar");
}else if(loadLanguage.equals("tr")){
locale = new Locale("tr");
} else if(loadLanguage.equals("fr")){
locale = new Locale("fr");
}
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
getActivity().getResources().updateConfiguration(config, getActivity().getResources().getDisplayMetrics());
recreat();
return true;
}
});