Android他の人が作成したプロジェクトをライブラリモジュールとしてプロジェクトにインポートしました。プロジェクトをクリーンアップして再ビルドした後でも、次のエラーが発生します:
定数式が必要ですリソースIDはAndroidライブラリのswitchステートメントでは使用できません
このエラーを修正するにはどうすればよいですか?
ここでの主な問題は、switch
ステートメントには、リテラル値、たとえば1
、"hello"
、またはクラスレベルで宣言されたfinal
変数。 Android R.id
の値はnotであり、そのエラーメッセージに記載されているように、API 14以降は定数であるため、switchステートメントの一部として使用できません。
次のように、定数値を必要としないif else
ステートメントを使用することもできます。
if (v.getId() == R.id.something) {
// Do something
} else if (v.getId() == R.id.something_else) {
// Do something else
}
// Repeat however many times required
else {
// Default value
}
各ビューにタグを設定し、スイッチケースで使用できます。このようなもの:
あなたの見解では:
...
Android:tag="test" />
コードで:
switch(v.getTag()){
case "test":
// Do Something
break;
}
これらの項目の1つでF4を押してみてください。
public final class R {
public static final class anim {
public static int abc_fade_in = 0x7f010001;
public static int abc_fade_out = 0x7f010002;
彼らは最終的に宣言されていません。
したがって、切り替えないif-elseステートメントを使用する必要があります。
歴史的なメモとして、それらは以前のバージョンのAndroidでは最終的なものでした...
詳細はこちら: 突然壊れるスイッチ
エラーが示すように、_R.id.someId
_は最終変数(静的最終整数)ではないため、switch
句を直接使用することはできません。代わりに、従来のif (v.getId() == R.id.openPictureBtn) { ... } else if (v.getId() == R.id.openCameraBtn) { ... }
条件ステートメントを使用してスイッチ全体を書き換えます。