2015-04-09 8 views
8

Nuovo per Android qui, quindi mi scuso se questa è una domanda semplicistica.Utilizzo della stringa dall'XML risorsa in Switch?

Sto tentando di utilizzare uno switch basato su risorse stringa nel mio XML. Sarebbe simile a questa:

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; 
} 

Sfortunatamente, questo non funzionerà. L'errore che ottengo è "Espressione costante richiesta".

C'è un modo semi-elegante per fare questo, senza dover fare qualcosa come creare 3 oggetti String e assegnare le risorse stringa a ciascun oggetto? Mi sento come se mi mancasse qualcosa di ovvio, quindi qualsiasi assistenza sarebbe grande!

Grazie :)

+3

il 'if else if' costruiscono – Blackbelt

+2

Assegnazione oggetti stringa questi valori ancora doesn funziona, giusto? I valori sono decisi in fase di esecuzione, non in fase di compilazione? –

risposta

3

Beh, prima di tutto, la versione di Java che Android si basa su non supporta istruzioni switch String, così generalmente bisogna usare if/else blocchi invece.

EDIT: istruzioni switch String sono supportati se si utilizza JDK 1.7 e successivamente

non sono sicuro che cosa il vostro caso d'uso è, ma se avete la ID di risorsa di myStringVariable, che è un int, puoi fare un passaggio su:

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

* non supporta istruzioni switch di stringa *, non è vero – Blackbelt

+0

Oh wow, grazie per averlo indicato. L'ultima volta che ho provato a fare uno switch String su Android era nel 2012, prima che potessimo compilare con JDK 1.7. – npace

3

Non ti manca qualcosa relativo ad Android ma relativo a Java invece.

Scegli questa risposta su come Java gestisce l'istruzione switch:

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

Dovrete utilizzare la soluzione non elegante che lei ha citato. Ma chi dice che non è elegante? È quello che dovresti fare, e questo lo rende elegante.

2

Beh, non è il modo più elegante, ma è possibile utilizzare se - else if invece di interruttore - caso:

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 
}