gpt4 book ai didi

android - SharedPrefs 在设置 Android 应用程序的区域设置后重置

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:49:49 26 4
gpt4 key购买 nike

我已经创建了一个 Activity 来更改应用程序的区域设置以加载所选语言的资源并重新启动应用程序,此外,在通过下面的代码,下次我打开应用程序时,提到的状态没有正确的值!!!!但是,当我删除语言设置时,应用程序的状态没有任何问题!

myLocale = new Locale(lang);
Resources res = getResources();
DisplayMetrics dm = res.getDisplayMetrics();
Configuration conf = res.getConfiguration();
conf.locale = myLocale;
res.updateConfiguration(conf, dm);
/*
* Intent refresh = new Intent(this, AndroidLocalizeActivity.class);
* startActivity(refresh); finish();
*/
PrefManager _p = new PrefManager(getApplicationContext(), PrefConfigNames.LANGUAGE_APP_CONFIG);
_p.setStringValue(GeneralPrefKeyNames.LANGUAGE, lang);

Intent i = getBaseContext().getPackageManager().getLaunchIntentForPackage(getBaseContext().getPackageName());
i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(i);

setResult(RESULT_OK, null);
finish();

我无法了解 sharedpreferences 发生了什么(我在此应用程序中使用了开源 securepreferences ( CodeProject article ))

这里!!!

提前致谢

编辑#1PrefManager.java

public class PrefManager {

private SecurePreferences _securePreferences = null;

public PrefManager(Context context, String PrefName)
{

_securePreferences = new SecurePreferences(context, PrefName);
}

public void setStringValue(String key, String value)
{

_securePreferences.edit().putString(key, value).commit();
}
}

编辑#2奇怪的是,当我从 eclipse 调试或运行应用程序(作为 android 应用程序调试或运行)时,存储在 sharedprefs 中的应用程序状态具有正确的值!!!但是当我在手机上重新运行它时有默认值!!!请帮我解决这个问题!

编辑#3我发现使用以下几行重新启动应用程序时出现问题,是否有另一种方法可以毫无问题地重新启动应用程序???或者更好的方法(更新语言而不重新启动应用程序 )?

Intent i = getBaseContext().getPackageManager().getLaunchIntentForPackage(getBaseContext().getPackageName());
i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(i);

我尝试了以下链接来实现第二种提到的方法

Changing locale: Force activity to reload resources?

,但在下一行之后没有被引发

res.updateConfiguration(conf, dm);

提前致谢

最佳答案

我终于找到了解决方案,在 onPause 方法中,我将当前保存的语言保存在 sharedprefs 中,在设置 Activity 中更改语言环境并在 onResume 方法中返回到上一个 Activity 后,我将新保存的语言与值进行比较保留在 onPause 中,如果这两个不相等,我调用 recreate 方法。

@Override
protected void onResume()
{
super.onResume();

SharedPreferences _sPreferences = getSharedPreferences(PrefConfigNames.LANGUAGE_APP_CONFIG,
Context.MODE_PRIVATE);
String resumeLang = _sPreferences.getString(GeneralPrefKeyNames.LANGUAGE, "En");
if (!currentLang.equals(resumeLang))
recreate();



};

@Override
protected void onPause()
{

SharedPreferences _sPreferences = getSharedPreferences(PrefConfigNames.LANGUAGE_APP_CONFIG,
Context.MODE_PRIVATE);
currentLang = _sPreferences.getString(GeneralPrefKeyNames.LANGUAGE, "En");
super.onPause();
};

关于android - SharedPrefs 在设置 Android 应用程序的区域设置后重置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34263268/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com