Подтвердить что ты не робот

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);

Заранее спасибо

4b9b3361

Ответ 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

Вы должны зафиксировать() значения