我有这个设置部分,允许用户更改应用程序中显示的语言。当用户选择不同的语言时,Activity 会重新加载,以便可以应用语言的更改。但问题是,当用户在更改语言后立即点击返回时,后台活动中显示的语言仍然是相同的。所以我的问题是,当我回到后台的某些活动时,我应该怎么做才能应用语言的变化?我想我应该做一些事情来检测onResume
方法的变化,但我不确定它是什么。如果您有任何建议,请让我知道。谢谢你。
问问题
2110 次
4 回答
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());
}
}
瞧,这成功了!
于 2013-07-22T17:53:21.220 回答
0
我建议使用 SharedPreferences。您可以在其中存储带有关联值的 lang 键,并在必要时对其进行更新。在您的 onResume() 方法中,您可以获得语言值,然后根据存储的值填充视图。
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();
这就是您开始工作所需的基础知识。
于 2013-07-22T09:27:56.303 回答
0
您是否尝试在更改完成后重新启动 Activity ?
你可以简单地使用
finish();
startActivity(getIntent());
每当检测到偏好更改时刷新活动。
于 2013-07-22T09:32:17.557 回答
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 撰写的完整答案: 在应用程序本身内更改区域设置
于 2018-06-12T19:15:22.753 回答