He mirado varias preguntas y respuestas sobre SO similares a esta pregunta pero no he encontrado una solución.
Lo que tengo es una enumeración que representa diferentes formas de ver una guía de TV ...
En la Application
clase NDroid
static enum guideView {
GUIDE_VIEW_SEVEN_DAY,
GUIDE_VIEW_NOW_SHOWING,
GUIDE_VIEW_ALL_TIMESLOTS
}
... cuando el usuario cambia la vista, un controlador de eventos recibe un int
0-2 y me gustaría hacer algo como esto ...
En un Activity
onClick(DialogInterface dialog, int which)
controlador de eventos de Android
// 'which' is an int from 0-2
switch (which) {
case NDroid.guideView.GUIDE_VIEW_SEVEN_DAY:
...
break;
}
Estoy acostumbrado a las enumeraciones de C # y las declaraciones select / case que permitirían algo como lo anterior y sé que Java hace las cosas de manera diferente, pero no puedo entender lo que tengo que hacer.
¿Voy a tener que recurrir a if
declaraciones? Es probable que solo haya 3 opciones, por lo que podría hacerlo, pero me preguntaba cómo se podría hacer con switch-case en Java.
EDITAR Lo siento, no amplié completamente el problema ya que lo veía como un problema genérico de Java. Agregué a la pregunta para explicar un poco más.
No hay nada que sea específico de Android, por lo que no lo etiqueté como Android, pero la enumeración está definida en la Application
clase y el código donde no quiero que el interruptor esté en un Activity
. La enumeración es estática ya que necesito acceder a ella desde múltiples actividades.
fuente
case GUIDE_VIEW_SEVEN_DAY
después de las importaciones adecuadas; ¿Qué problema (s) tienes?OnClickListener
) está definido por laDialogInterface
interfaz que tengo que implementar.Respuestas:
La parte que te falta es la conversión del número entero a la enumeración de tipo seguro. Java no lo hará automáticamente. Hay un par de formas en las que puede hacer esto:
guideView.GUIDE_VIEW_SEVEN_DAY.ordinal()
Determine el valor de enumeración representado por el valor int y luego active el valor de enumeración.
Puede que le resulte más útil / menos propenso a errores escribir una
valueOf
implementación personalizada que tome sus valores enteros como argumento para resolver el valor de enumeración apropiado y le permita centralizar la verificación de límites.fuente
case GuideView.SEVEN_DAY:
da un error de compilación, debería sercase SEVEN_DAY:
.Si
whichView
es un objeto de GuideView Enum, lo siguiente funciona bien. Tenga en cuenta que no hay ningún calificador para la constante posteriorcase
.fuente
Las enumeraciones no deben estar calificadas dentro de la etiqueta del caso como lo que tiene
NDroid.guideView.GUIDE_VIEW_SEVEN_DAY
, en su lugar, debe eliminar la calificación y usarGUIDE_VIEW_SEVEN_DAY
fuente
Me gustan algunos usos de la enumeración de Java:
enumeración con parámetros de valor:
ejemplo de interruptor:
fuente
Esto debería funcionar de la forma que usted describe. ¿Qué error estás recibiendo? Si pudiera pegar su código, eso ayudaría.
http://download.oracle.com/javase/tutorial/java/javaOO/enum.html
EDITAR: ¿Estás seguro de que quieres definir una enumeración estática? Eso no me suena bien. Una enumeración es muy parecida a cualquier otro objeto. Si su código se compila y se ejecuta pero da resultados incorrectos, probablemente esta sea la razón.
fuente
fuente
Ejemplo breve de función asociativa:
Como dijo @Dhanushka, omitir el calificador dentro de "switch" es la clave.
fuente
Lo estoy haciendo como
Y usar en Switch Statement
fuente