更改语言而不重新启动活动

时间:2017-10-31 12:36:29

标签: android fragment locale

我有一种方法可以将我的应用程序从英语翻译成瑞典语,如果用户愿意,可以再次返回。但是,我不太喜欢这项活动每次重启的事实,因为它给我带来了savedInstaceState的困难,而且我因此而遭遇了几次崩溃。

以下是我改变语言的方法:

public void setApplicationLanguage(String language) {
    myLocale = new Locale(language);
    Resources res = activity.getResources();
    DisplayMetrics display = res.getDisplayMetrics();
    Configuration configuration = res.getConfiguration();
    configuration.locale = myLocale;
    res.updateConfiguration(configuration, display);
    Intent refresh = new Intent(activity, StartupActivity.class);
    activity.startActivity(refresh);
} 

如果没有:

,是否有可能应用相同的功能
Intent refresh = new Intent(activity, StartupActivity.class);
activity.startActivity(refresh);

4 个答案:

答案 0 :(得分:5)

您可以替换代码:

Intent refresh = new Intent(activity, StartupActivity.class);
activity.startActivity(refresh);

使用Activity类的方法:

recreate();

我希望您的最低SDK版本能够支持,因为它是在SDK 11中引入的。您的活动将重新创建为新实例,请记住!一切都将重新开始。根据我的经验,与制作新的Intent相比,它是快速的。但是如果你想传递一些数据,使用Intent的方法比这更好!您可以在Intent添加额外内容。

答案 1 :(得分:3)

试试这个

  • 我也有这个问题。我使用下面的代码然后更改了语言而没有刷新活动
Makefile:84: *** missing separator.  Stop.
  • 在Manifest public void setLocale(String lang) { myLocale = new Locale(lang); Resources res = getResources(); DisplayMetrics dm = res.getDisplayMetrics(); Configuration conf = res.getConfiguration(); conf.locale = myLocale; res.updateConfiguration(conf, dm); onConfigurationChanged(conf); /*Intent refresh = new Intent(this, AndroidLocalize.class); startActivity(refresh);*/ } @Override public void onConfigurationChanged(Configuration newConfig) { // refresh your views here lblLang.setText(R.string.langselection); super.onConfigurationChanged(newConfig); // Checks the active language if (newConfig.locale == Locale.ENGLISH) { Toast.makeText(this, "English", Toast.LENGTH_SHORT).show(); } else if (newConfig.locale == Locale.FRENCH){ Toast.makeText(this, "French", Toast.LENGTH_SHORT).show(); } }
  • 中声明

答案 2 :(得分:1)

创建一个单例类:

public class Singleton {
   private static Singleton mInstance = null;

   private int repeat = 0;

   public int getRepeat() {
      return repeat;
   }

   public void setRepeat(int repeat) {
      this.repeat = repeat;
   }
}

现在您有了一个可以设置和获取数据的方法,因此创建一个方法并将其置于onResume()方法下,调用您的方法,您可以获取并设置如下数据:

Singleton.getInstance().setRepeat(1);
Singleton.getInstance().getRepeat();                        

答案 3 :(得分:-3)

您可以在此处使用SharedPreference Concepts。

只需在SharedPreference中保存语言状态即可。每当用户更改语言时将该状态保存到SharedPreference中。