2016-05-24 7 views
2

Gemäß meiner Anforderung muss die Anwendung Zeichenfolgenänderungen entsprechend der Gebietsschemaänderung auf dem Gerät widerspiegeln. Aber hier verwendet meist statische Map, um Enums zu halten, die nach Gebietswechsel reinitialisieren werden.enum static map funktioniert nicht für die Lokalisierung, wenn der Benutzer die Sprache des Gerätes ändert

Im Folgenden finden Sie Beispielcode:

public enum Color{ 

    Green(R.string.green), 
    Warning(R.string.red), 
    ENSLow(R.string.blue), 
    Zero(R.string.orange), 

private static Map<String, Color> colorMap = new HashMap<String, Color>(); 
    private final int mResId; 
} 

static { 
     for Color color : values()) { 
      colorMap .put(appContext.getResources().getString(state.mResId), color); 
     } 
    } 

    Color(int resId) { 
     mResId = resId; 
    } 

Bitte empfehlen Sie mir, wie kann ich den Einsatz von statischen Karte für Farbe vermeiden?

+0

Sprechen Sie die Karte mit der Ressource-ID: 'Map ' statt dem aufgelöste 'String' und ein Verfahren zu Ihrer Enumeration hinzufügen, um es bei Bedarf. – Anyonymous2324

+0

Warum brauchen Sie das? Die aktuelle Aktivität Ihrer App wird bei einer Gebietsschemaänderung neu erstellt, daher werden die Zeichenfolgen neu initialisiert. –

Antwort

0

Erstellen Sie auf diese Weise keine eigenen Konstanten. Android mach es schon für dich.

Verwenden Sie einfach immer appContext.getResources().getString(R.string.green)

Von Supporting Different Languages:

Zur Laufzeit des Android-System verwendet den entsprechenden Satz von String-Ressourcen auf der Lokalisierungs-Basis derzeit für das Gerät des Benutzers eingestellt.

So sind Ihre Strings bereits zwischengespeichert.

prüft dies: Resources.java#Resources.getText(int)