2015-12-14 15 views
11

Ho creato un'attività per modificare le impostazioni locali dell'applicazione per caricare le risorse della lingua selezionata e riavvio l'applicazione, inoltre sto mantenendo un valore intero come l'app stato utilizzando sharedpreferences, dopo aver impostato la locale tramite il seguente codice, la prossima volta che apro l'applicazione lo stato menzionato non ha il valore corretto !!!! Ma, quando rimuovo l'impostazione della lingua non c'è alcun problema con il stato dell'applicazione!SharedPrefs viene ripristinato dopo l'impostazione della locale dell'applicazione Android

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

non riesco a ottenere ciò che accade a sharedpreferences (ho usato securepreferences open source (CodeProject article) in questa applicazione)

qui !!!

Grazie in anticipo

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

Modifica # 2 Qualcosa che è così strano è che lo stato dell'applicazione memorizzata in sharedprefs ha il valore corretto quando eseguo il debug o eseguo l'applicazione da eclipse (esegui il debug o esegui come un pplication) !!! ma quando lo eseguo di nuovo sul telefono ha il valore predefinito !!! Per favore aiutami a risolvere questo problema!

Modifica # 3 ho scoperto che c'era un problema con il rilancio l'applicazione utilizzando le seguenti linee, c'è un altro modo per rilanciare l'applicazione senza alcun problema ??? O anche un modo migliore (aggiornare la lingua senza riavviare l'app)?

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

ho provato il seguente Link per ottenere il secondo approccio citato

Changing locale: Force activity to reload resources?

, ma non viene sollevata dopo la seguente riga

res.updateConfiguration(conf, dm); 

Grazie in anticipo

+0

Sembra che tu non sta eseguendo il commit() –

+0

io "commit()", Controllare la modifica per favore. –

+0

@ Jibяan Khan: controllare la modifica per favore ... –

risposta

1

Ho finalmente ottenuto la soluzione, nel metodo onPause salvi la lingua attualmente salvata in sharedprefs e dopo aver modificato la locale nell'attività di impostazione e tornare all'attività precedente nel metodo onResume, confronto il lang appena salvato con il valore mantenuto in onPause, e se questi due non sono uguali, chiamo metodo di ricreazione.

@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

Si dovrebbe commettere() i valori

+0

Io faccio "commit()", controlla la modifica per favore. –

+0

Controlla la modifica per favore. –

+0

Controllare la modifica n. 3 per favore –

Problemi correlati