2015-04-09 7 views
8

Neu bei Android hier, also entschuldige ich mich, wenn das eine simple Frage ist.Verwenden von Zeichenfolge aus Ressourcen-XML in Switch?

Ich versuche, einen Schalter basierend auf String-Ressourcen in meinem XML zu verwenden. Es würde ungefähr so ​​aussehen:

switch (myStringVariable) { 
    case getResources().getString(R.string.first_string): 
     break; 
    case getResources().getString(R.string.second_string): 
     break; 
    case getResources().getString(R.string.third_string): 
     break; 
    default: 
     break; 
} 

Leider wird dies nicht funktionieren. Der Fehler, den ich bekomme, ist "Konstanter Ausdruck erforderlich".

Gibt es eine halb-elegante Möglichkeit, dies zu tun, ohne etwas wie 3 String-Objekte erstellen zu müssen und jedem Objekt die String-Ressourcen zuzuordnen? Ich habe das Gefühl, dass mir etwas offensichtlich fehlt, also wäre jede Hilfe großartig!

Thanks :)

+3

die 'wenn sonst – Blackbelt

+2

if' zu konstruieren Zuordnung der String-Objekte noch diese Werte doesn Arbeit nicht, oder? Die Werte werden zur Laufzeit festgelegt, nicht zur Kompilierzeit? –

Antwort

3

Nun, zunächst einmal ist die Version von Java, dass Android auf String Switch-Anweisungen nicht unterstützt, so im Allgemeinen Sie stattdessen if/else Blöcke verwenden.

EDIT: String switch-Anweisungen unterstützt werden, wenn Sie JDK 1.7 und später

Ich bin nicht sicher, was Ihr Anwendungsfall ist, aber wenn Sie die Ressourcen-ID von myStringVariable haben, die ein int ist, Sie können einen Schalter über das:

switch (myStringResId) { 
case R.string.first_string: 
    break; 
case R.string.second_string: 
    break; 
case R.string.third_string: 
    break; 
default: 
    break; 
} 
+3

* nicht unterstützen String switch statements *, das ist nicht wahr – Blackbelt

+0

Oh wow, danke, dass du das herausgibst. Letztes Mal habe ich 2012 versucht, einen String-Switch auf Android zu machen, bevor wir mit JDK 1.7 kompilieren konnten. – npace

3

Sie nicht etwas Android-bezogenen, sondern Java-verwandten stattdessen verpassen.

prüfen diese Antwort, wie Java verwaltet die Switch-Anweisung:

https://stackoverflow.com/a/3827424/2823516

Sie finden nicht elegante Lösung Sie erwähnt verwenden. Aber wer sagt, ist nicht elegant? Was du tun solltest, und das macht es elegant.

2

Nun, es ist nicht die eleganteste Art und Weise, aber Sie können verwendet werden, wenn - else if-Anweisungen statt Schalter - Fall:

if (myStringVariable.eqals(getString(R.string.first_string))) { 
    // do something 
} else if (myStringVariable.eqals(getString(R.string.second_string))) { 
    // do something 
} else if (myStringVariable.eqals(getString(R.string.third_string))) { 
    // do something 
}