2012-05-25 20 views
12

Deseo implementar Navigation Pattern en mi aplicación con el botón Arriba en ActionBar.Botón ActionBar Up y patrón de navegación

Tengo detalles Actividad, aquí puedo venir desde casa, favoritos y pantalla de búsqueda. También puedo abrir esta pantalla desde el navegador (manejando una URL específica). Cuando el usuario presiona el botón Arriba, uso el método flush() para emular la navegación hacia atrás. Pero para el caso, cuando el usuario proviene del navegador, quiero abrir la pantalla de inicio en lugar de la actividad anterior del navegador. ¿Cómo puedo reconocer que la actividad anterior era de otra aplicación y navegar a la pantalla de inicio?

Respuesta

20

Arriba Siempre debe navegar al padre jerárquico de la actividad y Atrás siempre debe navegar temporalmente.

En otras palabras, debe dejar atrás como está.

En cuanto a Up, siempre debe ir al mismo lugar, no importa de dónde viene. Por lo tanto, si normalmente viene a la Actividad de detalles de YourListActivity, Up siempre debería ir allí, sin importar de dónde venga. Cuál es el lugar más probable depende de usted, pero siempre debe ser el mismo.

Si ve la Actividad de detalles desde una ubicación no normal (como el navegador, otra actividad, artilugio o notificación) debe volver a crear la pila de tareas para que la navegación con resultados resulte en la misma ruta. Este es un ejemplo de la Formación desarrollador Android:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case android.R.id.home: 
     Intent upIntent = new Intent(this, YourListActivity.class); 
     if (NavUtils.shouldUpRecreateTask(this, upIntent)) { 
      // This activity is not part of the application's task, so 
      // create a new task 
      // with a synthesized back stack. 
      TaskStackBuilder 
        .from(this) 
        .addNextIntent(new Intent(this, HomeActivity.class)) 
        .addNextIntent(upIntent).startActivities(); 
      finish(); 
     } else { 
      // This activity is part of the application's task, so simply 
      // navigate up to the hierarchical parent activity. 
      NavUtils.navigateUpTo(this, upIntent); 
     } 
     return true; 
    } 
} 

aquí es la formación de Android en la implementación de la navegación

(http://developer.android.com/training/implementing-navigation/index.html).

Necesitará la biblioteca de soporte para NavUtils y TaskStackBuilder.

+8

Al usar este método, la actividad principal pierde todo lo que se necesita y lo indica. ¿Tiene de todos modos para restaurarlo estado? – sarunw

+2

de acuerdo con las pautas (http://developer.android.com/design/patterns/navigation.html), la parte posterior no debe navegar temporalmente cuando una notificación lo coloca en la aplicación. Vea los ejemplos de gmail o calendario. – Maragues

+0

@art puedes probar mi solución: http://stackoverflow.com/a/20306670/878126 –

Cuestiones relacionadas