2015-04-21 5 views
6

Sto avviando un'attività - chi ha un'attività padre - da una notifica nel riquadro delle notifiche. L'attività figlio ha attivato la navigazione. Voglio che l'attività figlio ritorni all'attività padre quando si fa clic sul pulsante di navigazione su. Questo comportamento funziona per il normale flusso di applicazioni. Tuttavia, quando l'utente immette l'attività secondaria tramite la notifica, facendo clic sul pulsante di navigazione su non si porta l'utente all'attività padre; invece, termina l'applicazione.L'attività secondaria avviata dalla notifica non ritorna alla navigazione principale in avanti

Ecco il manifest per l'attività che deve essere avviata quando si fa clic sulla notifica. Ha un genitore TabbedActivity

<activity 
    android:name=".activity.AnimalDetailsActivity" 
    android:parentActivityName=".activity.TabbedActivity" > 
<meta-data 
    android:name="android.support.PARENT_ACTIVITY" 
    android:value=".activity.TabbedActivity"/> 
</activity> 

Qui è dove ho generare la notifica e di intenti:

Intent resultIntent = new Intent(context.getApplicationContext(), AnimalDetailsActivity.class); 
TaskStackBuilder stackBuilder = TaskStackBuilder.create(context.getApplicationContext()); 
stackBuilder.addParentStack(AnimalDetailsActivity.class); 
stackBuilder.addNextIntent(resultIntent); 
PendingIntent resultPendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); 

NotificationCompat.Builder builder = new NotificationCompat.Builder(context) 
    .setSmallIcon(icon_resource_id) 
    .setLargeIcon(large_icon) 
    .setContentTitle(title) 
    .setContentText(text) 
    .setContentIntent(resultPendingIntent) 
    .setAutoCancel(true); 

return builder.build(); 

e poi li mando fuori

private static void sendNotifications(List<android.app.Notification> notifications) { 
    NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE); 
    for (android.app.Notification notification : notifications) { 
    manager.notify(++drawerId, notification); 
    } 
} 

All'interno l'attività di destinazione, io abilitare il freccia su e freccia su:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    getActionBar().setHomeButtonEnabled(true); 
    getActionBar().setDisplayHomeAsUpEnabled(true); 

Credo di seguire correttamente le guide. Quindi, perché la freccia su non porta l'utente all'attività principale?

risposta

6

Come per il documentation, si dovrebbe implementare il onOptionsItemSelected() callback come segue, se si inizia la vostra attività con una nuova pila di nuovo:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    // Respond to the action bar's Up/Home button 
    case android.R.id.home: 
     Intent upIntent = NavUtils.getParentActivityIntent(this); 
     if (NavUtils.shouldUpRecreateTask(this, upIntent)) { 
      // This activity is NOT part of this app's task, so create a new task 
      // when navigating up, with a synthesized back stack. 
      TaskStackBuilder.create(this) 
        // Add all of this activity's parents to the back stack 
        .addNextIntentWithParentStack(upIntent) 
        // Navigate up to the closest parent 
        .startActivities(); 
     } else { 
      // This activity is part of this app's task, so simply 
      // navigate up to the logical parent activity. 
      NavUtils.navigateUpTo(this, upIntent); 
     } 
     return true; 
    } 
    return super.onOptionsItemSelected(item); 
} 
0

Per aggiungere alla risposta accettata, vorrei aggiungere isTaskRoot() controllo:

Perché quando l'app viene avviata dalla notifica, l'attività avviata fa parte dello stack dell'app, ma vogliamo comunque la ricreazione dell'attività per i genitori.

Problemi correlati