web-dev-qa-db-ja.com

エラーの解決方法:「リソースIDはAndroidライブラリモジュール)のswitchステートメントでは使用できません」

Android他の人が作成したプロジェクトをライブラリモジュールとしてプロジェクトにインポートしました。プロジェクトをクリーンアップして再ビルドした後でも、次のエラーが発生します:

定数式が必要ですリソースIDはAndroidライブラリのswitchステートメントでは使用できません

enter image description here

このエラーを修正するにはどうすればよいですか?

12
Gp Master

ここでの主な問題は、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
}
8
Michael Dodd

各ビューにタグを設定し、スイッチケースで使用できます。このようなもの:

あなたの見解では:

...
Android:tag="test" />

コードで:

switch(v.getTag()){
    case "test":
    // Do Something
    break;
}
5
Hamlet Leon

これらの項目の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では最終的なものでした...

詳細はこちら: 突然壊れるスイッチ

4
Elletlar

エラーが示すように、_R.id.someId_は最終変数(静的最終整数)ではないため、switch句を直接使用することはできません。代わりに、従来のif (v.getId() == R.id.openPictureBtn) { ... } else if (v.getId() == R.id.openCameraBtn) { ... }条件ステートメントを使用してスイッチ全体を書き換えます。

2