2016-04-28 20 views
18

Warum verwenden wir die TaskStackBuilder beim Erstellen einer Benachrichtigung? Ich verstehe die Logik nicht dahinter.Warum verwenden wir den TaskStackBuilder?

Kann mir bitte jemand erklären.

public void showText(final String text){ 
    Intent intent = new Intent (this, MainActivity.class); 
    TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); 
    stackBuilder.addParentStack(MainActivity.class); 
    stackBuilder.addNextIntent(intent); 
    PendingIntent pendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); 
    Notification notification = new Notification.Builder(this) 
      .setSmallIcon(R.mipmap.ic_launcher) 
      .setContentTitle(getString(R.string.app_name)) 
      .setAutoCancel(true) 
      .setPriority(Notification.PRIORITY_MAX) 
      .setDefaults(Notification.DEFAULT_VIBRATE) 
      .setContentIntent(pendingIntent) 
      .setContentText(text) 
      .build(); 
    NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
    notificationManager.notify(NOTIFICACTION_ID, notification); 
} 
+0

https://developer.android.com/training/implementing-navigation/temporal.html#CreateBackStack –

Antwort

33

Angenommen, Sie haben eine E-Mail senden App und Sie haben zwei Aktivitäten darin. Einer ist MainActivity, der die E-Mail-Liste hat und anderer ist für die Anzeige einer E-Mail (EmailViewActivity). Wenn Sie jetzt eine neue E-Mail erhalten, erhalten Sie eine Benachrichtigung in der Statusleiste. Und jetzt möchten Sie diese E-Mail anzeigen, wenn ein Benutzer darauf klickt und auch nach dem Anzeigen der E-Mail, wenn der Benutzer auf die Schaltfläche Zurück klickt, um die E-Mail-Listenaktivität anzuzeigen (MainActivity). Für dieses Szenario können wir TaskStackBuilder verwenden. Siehe folgendes Beispiel:

public void showEmail(final String text){ 

     Intent intent = new Intent (this, MainActivity.class); 
     TaskStackBuilder stackBuilder = TaskStackBuilder.create(this); 
     stackBuilder.addParentStack(MainActivity.class); 
     stackBuilder.addNextIntent(intent); 
     Intent intentEmailView = new Intent (this, EmailViewActivity.class); 
     intentEmailView.putExtra("EmailId","you can Pass emailId here"); 
     stackBuilder.addNextIntent(intentEmailView); 
     PendingIntent pendingIntent = stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); 
     Notification notification = new Notification.Builder(this) 
       .setSmallIcon(R.mipmap.ic_launcher) 
       .setContentTitle(getString(R.string.app_name)) 
       .setAutoCancel(true) 
       .setPriority(Notification.PRIORITY_MAX) 
       .setDefaults(Notification.DEFAULT_VIBRATE) 
       .setContentIntent(pendingIntent) 
       .setContentText(text) 
       .build(); 
     NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 
     notificationManager.notify(NOTIFICACTION_ID, notification); 
    } 

Ich hoffe, Sie können es verstehen.

Folgen unter Urls für weitere Informationen: http://developer.android.com/reference/android/support/v4/app/TaskStackBuilder.html http://developer.android.com/guide/components/tasks-and-back-stack.html http://www.programcreek.com/java-api-examples/index.php?api=android.app.TaskStackBuilder

3

Wir verwenden ein TaskStackBuilder sicher zu stellen, dass die Zurück-Taste wird spielen schön, wenn die Aktivität gestartet wird. Die TaskStackBuilder ermöglicht es Ihnen, Zugriff auf die Geschichte der Aktivitäten, die durch die Schaltfläche Zurück. Grundsätzlich verwenden wir es, wenn der Benutzer nach dem Drücken der Zurück-Taste zu einer anderen Aktivität navigieren soll.

0

Die anderen Antworten haben es gut erklärt: Sie verwenden eine ausstehende Absicht, um einen Benutzer zu einer Detailaktivität zu senden, und dann sollen sie die Zurück-Schaltfläche verwenden, um zur Hauptaktivität zurückzukehren. Eine alternative Möglichkeit, diese is

Intent detailIntentForToday = new Intent(context, DetailActivity.class); 
TaskStackBuilder taskStackBuilder = TaskStackBuilder.create(context); 
taskStackBuilder.addNextIntentWithParentStack(detailIntentForToday); 
PendingIntent resultPendingIntent = taskStackBuilder 
    .getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); 

Für diese Einstellung vornehmen, müssen Sie auch

android:parentActivityName=".MainActivity" 

für die DetailActivity in AndroidManifest.xml einzustellen.