Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/221.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Android在以编程方式更改应用程序语言时出现问题_C#_Android_Xamarin_Locale - Fatal编程技术网

C# Android在以编程方式更改应用程序语言时出现问题

C# Android在以编程方式更改应用程序语言时出现问题,c#,android,xamarin,locale,C#,Android,Xamarin,Locale,我构建了一个android应用程序(使用Xamarin c#),它包含一个设置屏幕,用户可以在其中更改应用程序语言。 此语言设置也通过调用API保存在服务器上。 更改语言后,我将文本刷新到设置屏幕和其他打开的活动中,所有内容似乎都正常工作 问题是当我关闭并重新打开应用程序时:我登录用户并从服务器读取语言数据。 我通过编程将应用程序的语言环境更改为我的主要活动:例如,我设置了一种不同于默认智能手机语言的语言。 此活动在ViewPager中包含4个片段,但有时这些片段使用“旧”语言,而“新”语言应用

我构建了一个android应用程序(使用Xamarin c#),它包含一个设置屏幕,用户可以在其中更改应用程序语言。 此语言设置也通过调用API保存在服务器上。 更改语言后,我将文本刷新到设置屏幕和其他打开的活动中,所有内容似乎都正常工作

问题是当我关闭并重新打开应用程序时:我登录用户并从服务器读取语言数据。 我通过编程将应用程序的语言环境更改为我的主要活动:例如,我设置了一种不同于默认智能手机语言的语言。 此活动在ViewPager中包含4个片段,但有时这些片段使用“旧”语言,而“新”语言应用不正确。 因此,当我打开一个新活动时,显示的语言是“旧”而不是“新”

我做错什么了吗? 有人能帮我吗

我的代码如下:

在我的AppBaseActivity类中,OnCreate事件:

base.OnCreate(bundle);

if (UserSettings != null
    && !string.IsNullOrWhiteSpace(UserSettings.LanguageCode))
{
    LocaleManager.ChangeAppLanguage(this, UserSettings.LanguageCode);
}
在我的AppBaseActivity类中,OnResume事件:

base.OnResume();

if (UserSettings != null
    && !string.IsNullOrWhiteSpace(UserSettings.LanguageCode))
{
    LocaleManager.ChangeAppLanguage(this, UserSettings.LanguageCode);
}
My LocaleManager.ChangeApplLanguage方法:

public static bool ChangeAppLanguage(Context context, String lang, bool saveInSharedPreferences)
        {
            Locale newLocale = new Locale(lang);

            if (Locale.Default.Language != newLocale.Language)
            {
                Locale.Default = newLocale;
                Android.Content.Res.Configuration config = new Android.Content.Res.Configuration();

                if (Build.VERSION.SdkInt >= BuildVersionCodes.Lollipop)
                {
                    config.SetLocale(newLocale);
                }
                else
                {
                    config.Locale = newLocale;
                }

                context.Resources.UpdateConfiguration(config, context.Resources.DisplayMetrics);

                if (saveInSharedPreferences)
                    return Helper.SaveInSharedPreferences(context, context.ApplicationContext.PackageName + ".languageCode", lang);

                return true;
            }

            return false;
        }

您应该在AppBaseActivity的
AttachBaseContext
方法中加载新的
Context
,您可以参考