SharedPrefs сбрасывается после настройки локали приложения Android
Я создаю действие для изменения локали приложения для загрузки ресурсов выбранного языка, и я перезапускаю приложение, более того, я сохраняю целочисленное значение как состояние приложения, используя sharedpreferences, после установки локали через следующий код, в следующий раз, когда я открою приложение, указанное состояние не имеет правильного значения!!!! Но, когда я удаляю настройку языка, нет никаких проблем с состоянием приложения!
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 (я использовал безопасные ссылки с открытым исходным кодом (статья CodeProject) в этом приложении)
здесь!!!
Заранее спасибо
Edit # 1
PrefManager.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();
}
}
Edit # 2
Что-то странное в том, что состояние приложения, хранящегося в sharedprefs, имеет правильное значение, когда я отлаживаю или запускаю приложение из eclipse (отлаживается или запускается как приложение для Android)!!!, но когда я перезапускаю его по телефону, имеет значение по умолчанию!!! Пожалуйста, помогите мне решить эту проблему!
Edit # 3
Я выяснил, что возникла проблема с перезапуском приложения, используя следующие строки: есть ли другой способ перезапустить приложение без каких-либо проблем? Или даже лучший способ (обновить язык без перезапуска приложения)?
Intent i = getBaseContext().getPackageManager().getLaunchIntentForPackage(getBaseContext().getPackageName());
i.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(i);
Я попытался использовать следующую ссылку для достижения второго упомянутого подхода
Изменение языка: принудительная активность для перезагрузки ресурсов?
но он не поднимается после следующей строки
res.updateConfiguration(conf, dm);
Заранее спасибо
Ответы
Ответ 1
Наконец-то я получил решение, в методе onPause я сохраняю сохраненный в данный момент язык в sharedprefs и после изменения языкового стандарта в активности настроек и возврата к предыдущей активности в методе onResume, я сравниваю недавно сохраненный язык со значением хранится в 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();
};
Ответ 2
Вы должны зафиксировать() значения