2010-12-21 5 views
5

Ich versuche, meine Fall-Anweisung öffnen eine andere Klasse je nachdem, welche Taste gedrückt wird. Ich habe das funktioniert gut für einen Knopf, aber bin mir nicht sicher, wie man für zwei Tasten vorgeht.Android-Fall-Anweisung Hilfe

Heres mein Code so weit:

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; 

    } 

} 

Dies bedeutet einen Fehler gibt, weil ich die lokale Variable (i) die Wiederverwendung - wenn jemand könnte mich wissen lassen, wie dies richtig zu machen wäre es sehr geschätzt werden.

Antwort

3

Sie könnten die Variable i vor der switch-Anweisung deklarieren. Dies ist besonders zu "Scoping" vorzuziehen, wenn Sie die Variable i nach der switch-Anweisung verwenden möchten:

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

Warum ist das besser als Scoping? nur sauberer und weniger Code? – user319940

+0

@ user319940 Ja, wie gesagt: Wenn Sie später die Variable 'i' nach der switch-Anweisung verwenden wollen, können Sie dies nicht tun, wenn Sie innerhalb der switch-Anweisung' i' lokal zum Geltungsbereich gemacht haben . Und unabhängig davon haben Sie weniger doppelten Code, wenn Sie 'startActivity (i)' auch nach der switch-Anweisung verschieben. :) –

+2

Fehleranfälliger, wenn Sie den Standardfall nicht behandeln. Stellen Sie sicher, dass ich es initialisiere und überprüfe. – EboMike

1

Scope it.

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

Großartig! scheint genau das zu sein, wonach ich gesucht habe: D – user319940

+0

IMHO: An dieser Stelle wäre es einfacher, Methoden startAboutActivity(), startReminderListActivity() ... usw. zu erstellen. – cyroxis