J'ai regardé plusieurs questions / réponses sur SO similaires à cette question mais je n'ai pas trouvé de solution.
Ce que j'ai est une énumération qui représente différentes façons d'afficher un guide TV ...
Dans la Application
classe NDroid
static enum guideView {
GUIDE_VIEW_SEVEN_DAY,
GUIDE_VIEW_NOW_SHOWING,
GUIDE_VIEW_ALL_TIMESLOTS
}
... lorsque l'utilisateur change la vue, un gestionnaire d'événements reçoit un int
de 0 à 2 et j'aimerais faire quelque chose comme ça ...
Dans un Activity
onClick(DialogInterface dialog, int which)
gestionnaire d'événements Android
// 'which' is an int from 0-2
switch (which) {
case NDroid.guideView.GUIDE_VIEW_SEVEN_DAY:
...
break;
}
Je suis habitué aux énumérations C # et aux instructions select / case qui permettraient quelque chose comme ce qui précède et je sais que Java fait les choses différemment, mais je ne peux tout simplement pas comprendre ce que je dois faire.
Vais-je devoir recourir aux if
déclarations? Il n'y aura probablement que 3 choix, donc je pourrais le faire, mais je me suis demandé comment cela pouvait être fait avec switch-case en Java.
EDIT Désolé, je n'ai pas complètement développé le problème car je le considérais comme un problème Java générique. J'ai ajouté à la question pour expliquer un peu plus.
Il n'y a rien de spécifique à Android, c'est pourquoi je ne l'ai pas étiqueté comme Android, mais l'énumération est définie dans la Application
classe et le code où je ne veux pas que le commutateur se trouve dans un Activity
. L'énumération est statique car je dois y accéder à partir de plusieurs activités.
la source
case GUIDE_VIEW_SEVEN_DAY
après des importations appropriées; quel (s) problème (s) rencontrez-vous?OnClickListener
) est défini par l'DialogInterface
interface que je dois implémenter.Réponses:
La partie qui vous manque est la conversion de l'entier vers l'énumération de type sécurisé. Java ne le fera pas automatiquement. Il existe plusieurs façons de procéder:
guideView.GUIDE_VIEW_SEVEN_DAY.ordinal()
Déterminez la valeur enum représentée par la valeur int, puis activez la valeur enum.
Vous pouvez trouver plus utile / moins sujet aux erreurs d'écrire une
valueOf
implémentation personnalisée qui prend vos valeurs entières comme argument pour résoudre la valeur d'énumération appropriée et vous permet de centraliser votre vérification des limites.la source
case GuideView.SEVEN_DAY:
donne une erreur de compilation, cela devrait êtrecase SEVEN_DAY:
.Si
whichView
est un objet de GuideView Enum, ce qui suit fonctionne bien. Veuillez noter qu'il n'y a pas de qualificatif pour la constante aprèscase
.la source
Les énumérations ne doivent pas être qualifiées dans l'étiquette de cas comme ce que vous avez
NDroid.guideView.GUIDE_VIEW_SEVEN_DAY
, à la place, vous devez supprimer la qualification et utiliserGUIDE_VIEW_SEVEN_DAY
la source
J'aime quelques utilisations de l'énumération Java:
enum avec des paramètres de valeur:
exemple de commutateur:
la source
Cela devrait fonctionner de la manière que vous décrivez. Quelle erreur obtenez vous? Si vous pouviez coller votre code, cela vous aiderait.
http://download.oracle.com/javase/tutorial/java/javaOO/enum.html
EDIT: Voulez-vous vraiment définir une énumération statique? Cela ne me semble pas juste. Une énumération ressemble beaucoup à tout autre objet. Si votre code se compile et s'exécute mais donne des résultats incorrects, ce serait probablement pourquoi.
la source
la source
Exemple court de fonction associative:
Comme @Dhanushka l'a dit, omettre le qualificatif à l'intérieur de "switch" est la clé.
la source
Je le fais comme
Et utiliser dans Switch Statement
la source