J'ai importé un projet Android créé par quelqu'un d'autre dans mon projet en tant que module de bibliothèque. J'obtiens l'erreur suivante même après le nettoyage et la reconstruction du projet:
Expression constante requise Les ID de ressource ne peuvent pas être utilisés dans l'instruction switch dans la bibliothèque Android
Comment puis-je corriger cette erreur?
Votre problème principal ici est que les instructions switch
nécessitent des valeurs constantes comme comparateurs, que ce soit une valeur littérale, par exemple 1
, "hello"
ou une variable final
déclarée au niveau de la classe. Android R.id
les valeurs ont pas constantes depuis l'API 14, comme indiqué dans ce message d'erreur, elles ne peuvent donc pas être utilisées dans le cadre d'une instruction switch.
Votre alternative serait d'utiliser if else
instructions car elles ne nécessitent pas de valeurs constantes, comme ceci:
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
}
Vous pouvez définir une balise pour chaque vue et utiliser la balise dans le boîtier de commutation. Quelque chose comme ça:
À votre avis:
...
Android:tag="test" />
Dans du code:
switch(v.getTag()){
case "test":
// Do Something
break;
}
Essayez d'appuyer sur F4 sur l'un de ces éléments:
public final class R {
public static final class anim {
public static int abc_fade_in = 0x7f010001;
public static int abc_fade_out = 0x7f010002;
Ils ne sont pas déclarés définitifs.
Vous devez donc utiliser les instructions if-else pour ne pas basculer.
Comme note historique, ils étaient finaux dans les anciennes versions d'Android ...
Détails ici: Commute soudainement cassé
Comme le dit l'erreur, R.id.someId
Ne sont pas des variables finales (int final statique), vous ne pouvez donc pas utiliser directement la clause switch
dessus. Réécrivez plutôt le commutateur entier avec des instructions conditionnelles classiques if (v.getId() == R.id.openPictureBtn) { ... } else if (v.getId() == R.id.openCameraBtn) { ... }
.