我正在尝试为一项作业的Android软件实现应用程序内语言更改。它正在运行Android 5.0。 我遇到的问题是使用finish();并且刷新新活动不会继承新的应用程序语言。 我想知道是否有任何方法可以将数据从活动A的旧调用传递到活动A的新调用? 具体来说,每次更改语言时,appLanguage变量都会初始化为“ en”,而不是我之前设置的其他语言。因此,如果我从英语切换为法语,然后尝试再次返回,则不会将语言切换回英语。例如。
到目前为止,我已经做了一些调查,发现它没有调用OnSaveInstanceState,但是经过更多挖掘后,我发现这是可以预期的。
//...A sample from OnCreate() which initialises the language on the app launch
if (savedInstanceState == null) {
appLanguage = Locale.getDefault().getLanguage();
} else {
appLanguage = savedInstanceState.getString("savedLanguage");
}
//...
//The method that changes the language
public void setAppLanguage(String newLanguage) {
if (!this.appLanguage.equals(newLanguage)) {
this.appLanguage = newLanguage;
Resources res = this.getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.setLocale(new Locale(this.appLanguage.toLowerCase()));
res.updateConfiguration(conf, dm);
Intent refresh = new Intent(this, MainActivity.class);
startActivity(refresh);
finish();
}
}
//I don't know how relevant this will be to the issue
protected void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putString("savedLanguage", appLanguage);
}
我希望使用finish()可以保存实例状态,并在活动的第二次调用中使用,但是saveInstanceState始终为null。