如何从Base活动刷新当前活动

时间:2014-02-09 10:16:59

标签: android multilingual explicit

对不起,标题似乎有点不清楚。

我有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);
}

2 个答案:

答案 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会受到这个解决方案的强烈影响。