如何将数据从完成活动发送到新活动?

时间:2019-07-19 13:59:29

标签: java android

我正在尝试为一项作业的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。

0 个答案:

没有答案