对不起,标题似乎有点不清楚。
我有Base_Activity类。
在那个课程中,我有一个菜单,其中有一个带有语言列表的微调器,可以用不同的语言更改应用程序的内容
我有三项活动
我想让用户可以在应用程序的任何地方(任何活动)更改语言
我成功地改变了语言,但这里的问题是当用户想要从那里更改语言时刷新当前活动。
public void setLocale(String currentLanguage) {
myLocale = new Locale(currentLanguage);
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = myLocale;
res.updateConfiguration(conf, dm);
Intent refresh = new Intent(//HERE HOW IS POSSIBLE SPECIFY THREE ACTIVITIES);
startActivity(refresh);
}
答案 0 :(得分:2)
您可以使用Activity方法“重新创建”,但我认为它需要API级别11,如下所示:
public void setLocale(String currentLanguage) {
myLocale = new Locale(currentLanguage);
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = myLocale;
res.updateConfiguration(conf, dm);
recreate ();
}
或者,如果这是区域设置更新,请使用此选项:
Locale locale = new Locale(AR_LANG);
Locale.setDefault(locale);
Configuration config = new Configuration();
config.locale = locale;
context.getResources().updateConfiguration(config, context.getResources().getDisplayMetrics());
答案 1 :(得分:0)
一种方法可能是finish()并重新启动活动,就像android在配置更改时破坏它一样。
finish();
Intent i = new Intent( this, this.getClass() );
startActivity( i );
此解决方案的缺点是您实际上正在创建一个全新的活动,用户将会看到一个黑屏。
另一个可行的解决方案是将容器作为活动的contentView,并自己重新审视整个View。这里的缺点是你的代码和View hiearchy会受到这个解决方案的强烈影响。