2011-11-03 17 views
5

Cuando una aplicación se inicia o se reanuda, me gustaría redirigir al usuario a una 'Actividad' específica basada en una variable establecida en 'SharedPrefences'.Inicie la aplicación de Android con actividad específica

Para hacer esto yo estaba considerando tener un método que verifica la variable de estado SharedPreferences y redirige a la actividad correcta:

private void launchRedirect(Context ctxt) { 

    Integer status = AppPreferences.getStatus(this); 
    Intent i = new Intent(MainActivity.this, Activity1.class); 

    switch (status) { 
    case 0: 
     i = new Intent(MainActivity.this, Activity2.class); 
    case 1: 
     i = new Intent(MainActivity.this, Activity3.class); 
    case 2: 
     i = new Intent(MainActivity.this, Activity4.class); 
    case 3: 
     i = new Intent(MainActivity.this, Activity5.class);  
    } 
    startActivity(i); 
} 

Y entonces yo podría llamar a este método en cada método 'onResume' para todas las actividades de mi aplicación:

public void onResume(Bundle savedInstanceState) { 
    launchRedirect(this); 
} 

Esto significaría que el usuario no puede técnicamente volver a la última actividad, porque cuando lo llaman, se llama onResume, y será redirigido al estado que se corresponde con el usuario actual.

Supongo que esto podría dar lugar a algunos errores circulares, ¿hay una forma mejor de hacerlo?

+0

Buena pregunta tan +1 –

Respuesta

5

Creo que es una forma normal de hacerlo, excepto que también puede agregar el método call of finish(), si necesita cerrar MainActivity en esta situación.

Además, no se olvide de las sentencias break:

private void launchRedirect(Context ctxt) { 

    Integer status = AppPreferences.getStatus(this); 
    Intent i = new Intent(MainActivity.this, Activity1.class); 

    switch (status) { 
    case 0: 
    i = new Intent(MainActivity.this, Activity2.class); 
    break; 
    case 1: 
    i = new Intent(MainActivity.this, Activity3.class); 
    break; 
    case 2: 
    i = new Intent(MainActivity.this, Activity4.class); 
    break; 
    case 3: 
    i = new Intent(MainActivity.this, Activity5.class); 
    break; 
    } 
    startActivity(i); 
    if (/* check if MainActivity should be closed */) { 
    finish(); 
    } 
} 
+1

ah buenos puntos. Gracias. Además, todavía no tengo suficientes puntos de representación para votar, de lo contrario lo haría. – Asha

+0

Sí, esta pregunta me dio suficientes puntos de rep. :) Gracias por su ayuda – Asha

+1

. Sean bienvenidos :) ¿Pueden también aprobar mi respuesta como correcta, por favor? – morphium

1

Por favor asegúrese de que está actualizando el valor de preferencia según su activtiy navegación. Eso guardará sus cheques innecesarios para el lanzamiento de la actividad.

Cuestiones relacionadas