2017-01-10 9 views
0

ActivitySpinnerがあり、ユーザーが選択できる項目は「hello」と「goodbye」です。これらのアイテムは、デバイスがスペイン語の場合、文字列がstringではなくstring-es/から選択されるため、 "hola"と "adios"になります。スイッチケースで使用される言語に応じて、スピナーが選択した文字列に依存します。

問題は、私はこのように私のコードに多くのスイッチケースを持っていることである:

switch(spinnerSelectedItem){ 
    case "hello": 
    case "hola": 
      //do something 
      break; 
    case "goodbye": 
    case "adios": 
      //do something else 
      break; 

} 

私は、文字列リソースを使用して初期化、最終的な文字列を作成しようとしたが、それは定数式が必要です」と言って文句を言います

final String resHello = getResources().getString(R.string.helloText); 
final String resGoodbye = getResources().getString(R.string.goodbyeText); 

switch(spinnerSelectedItem){ 
    case resHello :  
      //do something 
      break; 
    case resGoodbye : 
      //do something else 
      break; 
} 

これは簡易版である "、私はより多くのアイテムを持っており、二つ以上の言語

一つの解決策ではなく、文字列IDを使用することですスイッチの代わりにif節を使うことができますが、これを行うには「スマートな」方法や「クリーンな」方法を見つけたいと思います。

+0

idを使用すると、スイッチの場合に使用でき、言語に応じて自動的に正しいリソースを指すようになるので、より良いでしょう – akash93

+0

次に、選択した文字列をIDに変換する方法を記述する必要があります。たとえば、次のようにします。 'public int idFromStringResourceValue(文字列resValue){ if(resValue.equals(getResources()。getString(R.string.helloText)){return R.string.helloText;} if(resValue.equals また、より良い方法がありますか? – jordileft

+0

Stringオブジェクトのswitch文は、Java 1.7で導入された新機能です。 (英語の情報は、こちらを参照してください。 http://stackoverflow.com/questions/14367629/android-coding-with-switch-string –

答えて

0

ResourcesのgetIdentifierメソッドを使用して、文字列のIDを取得できます。例: getResources().getIdentifier(resValue, "string", getPackageName()) これは、switch文で使用できるidを返して比較します。

+0

ありがとう!私はスピナーに関連する限られた範囲の文字列でマッチを探し出すための独自のメソッドを作成すると思います。おそらく、このメソッドを使用するよりも速く、すべての文字列リソースを検索します。 – jordileft

+0

あなたが持っている文字列リソースの数によって異なります。しかし、私はこのメソッドは、より多くの文字列リソースを複数の言語で追加し続けると、将来的には拡張可能だと思います – akash93

+0

ありがとうございました! – jordileft

関連する問題