假设这是调用堆栈:
Fragment2(当前位置)
片段1
HostingActivity
用户刚刚导航到fragment2(这是设置屏幕)。他选择了第二种语言,然后导航回Fragment1。我希望应用程序在进入fragment1后立即显示第二语言的内容。
我已经读过,最好的方法是让所有片段都来自一个基本片段,它在OnResume()
方法中配置语言环境。
public class BaseFragment : Fragment
{
public override void OnResume()
{
string langCode = prefs.GetString("settings_language", "en_US");
Resources res = Application.Context.Resources;
// Change locale settings in the app.
DisplayMetrics dm = res.DisplayMetrics;
Configuration conf = res.Configuration;
conf.SetLocale(new Locale(langCode.ToLower()));
res.UpdateConfiguration(conf, dm);
OnConfigurationChanged(conf);
base.OnResume();
}
}
我试过这个,但没有运气。我没有看到任何改变。 我愿意听取任何建议。
PS。为了确保我没有搞砸Android在values文件夹中所需的任何命名约定,我尝试使用我想要的语言重新启动模拟器(使用adb shell)并且它按预期工作。
答案 0 :(得分:0)
您可以创建一个基类,像这样设置CurrentCulture
并继承它:
internal class MyBaseActivity : Activity
{
protected override void OnResume ()
{
base.OnResume ();
// Get the language from wherever.
var userSelectedCulture = new CultureInfo ("fr-FR");
Thread.CurrentThread.CurrentCulture = userSelectedCulture;
}
}
以下是如何继承和使用它:
public class MainActivity : MyBaseActivity
{
protected override void OnResume()
{
base.OnResume(); // Do not forget to call base.OnResume()
// Rest of Your Code...
}
}