2016-08-23 5 views
0

Ich muss das Gebietsschema einer App speichern, wenn der Benutzer einen von Spinner wählt. Im Moment kann ich es ändern, aber es muss die Sitzung speichern, wenn der Benutzer die App beendet.Wie speichere ich das Gebietsschema in Android?

here meinen Code:

Locale locale = new Locale(lang); 
    Locale.setDefault(locale); 
    Configuration config = new Configuration(); 
    config.locale = locale; 
    getActivity().getBaseContext().getResources().updateConfiguration(config, 
      getActivity().getBaseContext().getResources().getDisplayMetrics()); 

SharedPreferences shp = getActivity().getSharedPreferences(
      "android.exaple.com.PREFERENCES", Context.MODE_PRIVATE); 
    SharedPreferences.Editor editor = shp.edit(); 
    editor.putString("USER_LANGUAGE", lang); 
    editor.apply(); 
+0

Sie haben die Frage mit SharedPreferences markiert, aber Sie haben keinen Code, der sie verwendet. Du weißt also offensichtlich, dass du es brauchst, ja? –

+0

Speichern Sie stattdessen die Sprache 'String' und erstellen Sie das Locale-Objekt aus der Sprache' String'. – DeeV

+0

Sie können lokalen Wert erhalten und in SharedPreferences als JSON-Format speichern, so dass Sie alle Eigenschaften von Locale abrufen können (z. B. Land, Displayname, Code ....) – ViramP

Antwort

0

Okay, sie gibt und Beispiel für Sie, Ok ich Aleart Dialog in diesem Fall benutzen, können Sie es mit Spinnern versuchen.

AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setTitle(R.string.chooselanguage).setItems(R.array.language, new DialogInterface.OnClickListener() { 
      @Override 
      public void onClick(DialogInterface dialogInterface, int i) { 
       switch (i) { 
        case 0: 
         SharedPreferences ensharedPreferences = getSharedPreferences("selectedLanguage", Context.MODE_PRIVATE); 
         SharedPreferences.Editor eneditor = ensharedPreferences.edit(); 
         eneditor.putString("language", "en"); 
         eneditor.commit(); 
         Toast.makeText(MainActivity.this, "English Selected", Toast.LENGTH_SHORT).show(); 
         break; 
        case 1: 
         SharedPreferences npsharedPrefrences = getSharedPreferences("selectedLanguage", Context.MODE_PRIVATE); 
         SharedPreferences.Editor npeditor = npsharedPrefrences.edit(); 
         npeditor.putString("language", "ne"); 
         npeditor.commit(); 
         Toast.makeText(MainActivity.this, "Nepali Selected", Toast.LENGTH_SHORT).show(); 
         } 
      } 
     }).setCancelable(false).create().show(); 

Jetzt wird die Sprache nach Wahl aus Top-Code speichern. Rufen Sie sie jetzt mit dem folgenden Code für onStart() Callback Ihrer Aktivität auf.

SharedPreferences sharedPreferences = this.getSharedPreferences("selectedLanguage", Context.MODE_PRIVATE); 
    String pine = sharedPreferences.getString("language", DEFAULT); 
    String languageToLoad = pine; 
    Locale locale = new Locale(languageToLoad);//Set Selected Locale 
    Locale.setDefault(locale);//set new locale as default 
    Configuration config = new Configuration();//get Configuration 
    config.locale = locale;//set config locale as selected locale 
    this.getResources().updateConfiguration(config, this.getResources().getDisplayMetrics()); 

Sie können auch erhalten Problem wie, Wenn der Benutzer ausgewählte Sprache Nepali aber Englisch ist immer noch angezeigt werden, und nur der App Neustart notwendig ist, dann müssen Sie in Spinner folgenden Code hinzuzufügen.

Der obige Code startet die aktuelle Aktivität neu. Und das overridePendingTransition (0,0); löscht die Annimierung der Übergänge beim Öffnen und Schließen der Aktivität. Hoffe das half !!

Verwandte Themen