Java 从共享首选项中读取区域设置不会';我不为主要活动工作

Java 从共享首选项中读取区域设置不会';我不为主要活动工作,java,android,sharedpreferences,Java,Android,Sharedpreferences,我正在使用此方法更改应用程序中的区域设置: public void setLanguageSettings(String localeLang){ Locale locale = new Locale(localeLang); saveString("lang", localeLang); Locale.setDefault(locale); Configuration configSlo = new Configuration(); configSlo.

我正在使用此方法更改应用程序中的区域设置:

public void setLanguageSettings(String localeLang){
    Locale locale = new Locale(localeLang);
    saveString("lang", localeLang);
    Locale.setDefault(locale);
    Configuration configSlo = new Configuration();
    configSlo.locale = locale;
    getBaseContext().getResources().updateConfiguration(configSlo, getBaseContext().getResources().getDisplayMetrics());
}
如您所见,localeLang字符串变量随后保存到SharedReferences。在我的例子中,这个变量是
“sl”
“en”
(默认值是
“en”

然后,每当应用程序启动时(每次打开MainActivity时),我都会调用这个(相同的)方法:


区域设置已成功更改(我使用日志检查),但问题是在MainActivity中看不到更改。如果我打开任何其他活动,语言是正确的,但是主活动仍然是
“en”
,即使它应该是
“sl”
。我必须重新启动MainActivity,才能使它成为
“sl”

我以一种奇怪的方式解决了这个问题。我刚刚在change language方法中再次调用了setContentView:

setContentView(R.Layout.MainLayout);

我用一种奇怪的方式解决了这个问题。我刚刚在change language方法中再次调用了setContentView:

setContentView(R.Layout.MainLayout);

您必须在应用程序启动时检查它,并在您的活动中在onResume()方法中调用它……。我添加了onResume和此代码,但它仍然不起作用。但是更改语言后,您必须从共享首选项中检查local,如果它是“sl”然后返回true,否则返回false意味着返回英语lang?我不太确定你想说什么,你必须在应用程序启动时检查它,并在你的活动中在onResume()方法中调用它……….我添加了onResume和此代码,但它仍然不起作用。但是在更改语言后,你必须从共享首选项中检查本地是否为“sl”然后返回true,否则返回false意味着返回英语lang?我不太清楚你想说什么