2010-12-21 23 views
5

Próbuję sprawić, że moja etykieta przypadku otworzy inną klasę w zależności od tego, który przycisk zostanie naciśnięty. Mam to działa dobrze dla jednego przycisku, ale nie jestem pewien, jak postępować dla dwóch przycisków.Oświadczenie na walizkę z systemem Android - pomoc

Herezje mój kod do tej pory:

public void onClick(View v) { 
    switch (v.getId()) { 
    case R.id.about_button: 
     Intent i = new Intent(this, About.class); 
     startActivity(i); 
     break; 
    case R.id.reminderList_button: 
     Intent i = new Intent (this, ReminderListActivity.class); 
     startActivity(i); 
     break; 

    } 

} 

Daje to błąd, ponieważ jestem ponowne użycie zmiennej lokalnej (I) - jeśli ktoś mógłby dać mi znać, jak to zrobić poprawnie byłoby mile widziane.

Odpowiedz

3

Można zadeklarować zmienną i przed switch. Jest to szczególnie korzystne w przypadku "zakresu", jeśli planujesz użyć zmiennej i po instrukcji przełączania:

public void onClick(View v) { 
    Intent i = null; 
    switch (v.getId()) { 
    case R.id.about_button: 
     i = new Intent(this, About.class); 
     break; 
    case R.id.reminderList_button: 
     i = new Intent (this, ReminderListActivity.class); 
     break; 
    } 
    startActivity(i); 
    ...; // other statements using `i' 
} 
+0

Jakiekolwiek powody, dla których jest to lepsze niż ustalanie zakresu? po prostu czystsze i mniej kodu? – user319940

+0

@ user319940 Tak, jak już powiedziałem: jeśli chcesz użyć zmiennej 'i' później, po instrukcji switch, to nie będziesz w stanie tego zrobić, jeśli' i' local do zakresu w instrukcji switch . Niezależnie od tego będziesz miał mniej zduplikowany kod, jeśli wypuścisz 'startActivity (i)' również po instrukcji switch. :) –

+2

Bardziej podatny na błędy, jeśli nie zajmujesz się przypadkiem domyślnym. Koniecznie zainicjuj i sprawdź przynajmniej. – EboMike

1

Zakres.

public void onClick(View v) { 
    switch (v.getId()) { 
    case R.id.about_button: 
     { 
      Intent i = new Intent(this, About.class); 
      startActivity(i); 
      break; 
     } 
    case R.id.reminderList_button: 
     { 
      Intent i = new Intent (this, ReminderListActivity.class); 
      startActivity(i); 
      break; 
     } 
    } 
} 
+0

Świetnie! wydaje się być dokładnie tym, czego szukałem: D – user319940

+0

IMHO: W tym momencie byłoby bardziej czytelne tworzenie metod startAboutActivity(), startReminderListActivity() ... itd. – cyroxis

Powiązane problemy