我有这个设置部分,我允许用户更改应用程序中显示的语言。当用户选择不同的语言时,将重新加载活动,以便可以应用语言的更改。但问题是,当用户在更改语言后立即单击后,后台活动中显示的语言仍然相同。
所以我的问题是,当我回到后台的一些活动时,我应该怎么做才能应用语言的变化?我想我应该做些什么来检测onResume
方法的变化,但我不确定它是什么。如果您有任何建议,请让我知道。
谢谢。
答案 0 :(得分:4)
经过多次尝试,我找到了解决问题的方法。在我的onCreate
方法上,我得到包含当前语言值的SharedPreferences
,并获取当前语言:
SharedPrefrences languagepref = getSharedPreferences("language",MODE_PRIVATE);
String language = languagepref.getString("languageToLoad", Locale.getDefault().getDisplayLanguage());
然后,在我的onResume
方法中,我将上述变量language
的值分配给局部变量,并更新language
的值。然后我比较这两个变量 - 如果它们不同,我将销毁当前活动并启动另一个:
@Override
public void onResume(){
super.onResume();
String oldLanguage = language;
language = languagepref.getString("languageToLoad", Locale.getDefault().getDisplayLanguage());
if (!oldLanguage.equals(language)){
finish();
startActivity(getIntent());
}
}
瞧,这就是诀窍!
答案 1 :(得分:0)
我建议使用SharedPreferences。您可以在其中存储包含相关值的lang键,并在必要时进行更新。在onResume()方法中,您可以获取lang值,然后根据存储的值填充视图。
SharedPreferences sharedPreferences;
sharedPreferences = this.getSharedPreferences("MyActivity", Activity.MODE_PRIVATE);
String lang = sharedPreferences.getString("lang", "en-GB");
SharedPreferences.Editor editor;
editor = sharedPreferences.edit();
editor.putString("lang", "en-US").commit();
这是你需要的基础知识。
答案 2 :(得分:0)
您是否尝试在更改完成后重新启动活动?
您可以使用
finish();
startActivity(getIntent());
在检测到偏好更改时刷新活动。
答案 3 :(得分:0)
内置后退功能不会刷新代码,因此请在更改语言后执行此操作。
@Override
public void onBackPressed()
{
//new MainActivity();
Intent intent=new Intent(this,MainActivity.class);
startActivity(intent);
}
并在Main Activity类中执行此操作
public MainActivity() {
//1- This code is responsible for updating the change of all Strings from a language to another
//it will be called every time this activity is instantiated (da,since it is a constructor) , or when this activity gets
// called by an intent.
//2- Every String inside this Activity(ever fragment inside it ) will also be under the effect of change of language
LocalUtils.updateConfig(this);
}
请查看以下答案并将其添加到其中。要获得Roberto.B和LarsH撰写的完整答案: Changing Locale within the app itself