Spojrzałem na różne pytania i odpowiedzi na SO podobne do tego pytania, ale nie znalazłem rozwiązania.
To, co mam, to wyliczenie, które reprezentuje różne sposoby przeglądania przewodnika telewizyjnego ...
W Application
klasie NDroid
static enum guideView {
GUIDE_VIEW_SEVEN_DAY,
GUIDE_VIEW_NOW_SHOWING,
GUIDE_VIEW_ALL_TIMESLOTS
}
... kiedy użytkownik zmienia widok, program obsługi zdarzeń otrzymuje int
od 0-2 i chciałbym zrobić coś takiego ...
W programie Activity
onClick(DialogInterface dialog, int which)
obsługi zdarzeń systemu Android
// 'which' is an int from 0-2
switch (which) {
case NDroid.guideView.GUIDE_VIEW_SEVEN_DAY:
...
break;
}
Jestem przyzwyczajony do wyliczeń C # i instrukcji select / case, które pozwoliłyby na coś takiego jak powyższe i wiem, że Java robi rzeczy inaczej, ale po prostu nie mogę zrozumieć, co muszę zrobić.
Czy będę musiał uciekać się do if
oświadczeń? Prawdopodobnie będą tylko 3 opcje, więc mogłem to zrobić, ale zastanawiałem się, jak można to zrobić z przełącznikiem w Javie.
EDYTUJ Przepraszamy, nie rozwinęłam tego problemu całkowicie, ponieważ patrzyłem na niego jako na ogólny problem z Javą. Dodałem do pytania, aby nieco bardziej wyjaśnić.
Nie ma niczego, co jest specyficzne dla Androida, dlatego nie oznaczyłem go jako Androida, ale wyliczenie jest zdefiniowane w Application
klasie, a kod, w którym nie chcę, aby przełącznik znajdował się w pliku Activity
. Wyliczenie jest statyczne, ponieważ muszę uzyskać do niego dostęp z wielu działań.
źródło
case GUIDE_VIEW_SEVEN_DAY
po odpowiednim imporcie; jaki masz problem (y)?OnClickListener
) jest zdefiniowany przezDialogInterface
interfejs, który muszę zaimplementować.Odpowiedzi:
Brakująca część to konwersja z liczby całkowitej do wyliczenia bezpiecznego dla typu. Java nie zrobi tego automatycznie. Można to zrobić na kilka sposobów:
guideView.GUIDE_VIEW_SEVEN_DAY.ordinal()
Określ wartość wyliczenia reprezentowaną przez wartość int, a następnie włącz wartość wyliczenia.
Może się okazać, że bardziej pomocne / mniej podatne na błędy będzie napisanie niestandardowej
valueOf
implementacji, która przyjmuje wartości całkowite jako argument w celu rozwiązania odpowiedniej wartości wyliczenia i umożliwia scentralizowanie sprawdzania granic.źródło
case GuideView.SEVEN_DAY:
daje błąd kompilacji, a powiniencase SEVEN_DAY:
.Jeśli
whichView
jest obiektem GuideView Enum, następujące działa dobrze. Należy pamiętać, że nie ma kwalifikatora dla stałej pocase
.źródło
Wyliczenia nie powinny być kwalifikowane w etykiecie przypadku, tak jak to, co masz
NDroid.guideView.GUIDE_VIEW_SEVEN_DAY
, zamiast tego należy usunąć kwalifikację i użyćGUIDE_VIEW_SEVEN_DAY
źródło
Podoba mi się kilka zastosowań wyliczenia w Javie:
wyliczenie z parametrami wartości:
przykład przełącznika:
źródło
Powinno to działać w sposób, który opisujesz. Jaki błąd otrzymujesz? Gdybyś mógł wkleić swój kod, to by pomogło.
http://download.oracle.com/javase/tutorial/java/javaOO/enum.html
EDYCJA: Czy na pewno chcesz zdefiniować statyczne wyliczenie? To nie brzmi dla mnie dobrze. Wyliczenie jest podobne do każdego innego obiektu. Jeśli twój kod kompiluje się i działa, ale daje nieprawidłowe wyniki, prawdopodobnie jest to przyczyna.
źródło
źródło
Krótki przykład funkcji asocjacyjnej:
Jak powiedział @Dhanushka, pomiń kwalifikator w kluczu „przełącznik”.
źródło
Robię to jak
I użyj w instrukcji Switch
źródło