2010-12-21 16 views
5

Estoy tratando de hacer que mi declaración de caso abra una clase diferente dependiendo de qué botón se presione. Esto funciona bien para un botón pero no estoy seguro de cómo proceder para dos botones.Android case statement help

Heres mi código hasta ahora:

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; 

    } 

} 

Esto da un error porque estoy reutilización de la variable local (i) - si alguien puede que me haga saber cómo hacer esto correctamente, sería muy apreciada.

Respuesta

3

Puede declarar la variable i antes de la instrucción de cambio. Esto es especialmente preferible a "scoping" si planea usar la variable i después de la instrucción de cambio:

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

¿Alguna razón por la cual esto es mejor que el alcance? solo un código más limpio y menos? – user319940

+0

@ user319940 Sí, como dije: si desea utilizar la variable 'i' más tarde, después de la declaración de cambio, no podrá hacerlo si ha hecho' i' local para el alcance dentro de la declaración de cambio . Y a pesar de todo, tendrá menos código duplicado si se mueve 'startActivity (i)' después de la instrucción switch también. :) –

+2

Más propenso a errores si no maneja el caso predeterminado. Asegúrese de inicializar y verificar i, al menos. – EboMike

1

Alcance 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

¡Genial! parece ser justo lo que estaba buscando: D – user319940

+0

EN MIEMBRO: En este punto sería más legible crear métodos startAboutActivity(), startReminderListActivity() ... etc. – cyroxis