2015-12-14 11 views
11

私は、選択した言語のリソースを読み込むようにアプリケーションのロケールを変更するアクティビティを作成し、アプリケーションを再起動します。さらに、アプリケーションとして整数値を保持しています状態をsharedpreferencesを使用して、次のコードを介してロケールを設定した後、次回にアプリケーションを開くときに正しい値を持たない!!!!しかし、言語設定を削除すると問題はありません。アプリケーションの状態!Androidアプリケーションのロケール設定後にSharedPrefsがリセットされる

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

!事前に

おかげ

編集#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(); 
    } 
} 

編集#2 とても奇妙である何かがアプリケーションの状態が保存されていることですsharedprefsの正しい値を持っているかどうかは、Eclipseからアプリケーションをデバッグまたは実行する(デバッグするか、アンドロイドとして実行するかpplication)!!!しかし、電話でそれを再実行すると、デフォルト値になります!!!この問題を解決するのを手伝ってください!

編集#3 私は、次の行を使用してアプリケーションをリニューアルに問題があったことが判明何の問題もなくアプリを再起動する別の方法???それとも、より良い方法(がありますアプリを再起動せずに言語を更新する)?

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

は私が事前に

res.updateConfiguration(conf, dm); 

感謝を二述べたアプローチ

Changing locale: Force activity to reload resources?

を達成するには次のリンクを試してみたが、それは次の行の後に提起されていません

+0

あなたがコミットしていないように見えます。 –

+0

私は "コミットします"、編集を確認してください。 –

+0

@JibяanKhan:編集を確認してください... –

答えて

1

私は最後に解決策を得ました。私は現在保存されている言語をsharedprefsに保存し、設定アクティビティでロケールを変更して、onResumeメソッドの前のアクティビティに戻った後、値がonPauseに保持され、これらの2つが等しくない場合、私は再作成メソッドを呼び出します。

@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(); 
}; 
0

値をコミットする必要があります。

+0

私は "commit()"を編集してください。 –

+0

編集を確認してください。 –

+0

チェックを編集#3してください –

関連する問題