2015-04-21 18 views
6

Bildirim çekmecesinde bir bildirimde bulunarak - bir üst etkinliğe sahip bir etkinliğe - başladım. Çocuk aktivitesinde gezinme etkinleştirildi. Yukarı hareket düğmesi tıklandığında alt etkinliğin ana etkinliğe dönmesini istiyorum. Bu davranış, normal uygulama akışı için çalışır. Ancak, kullanıcı bildirim yoluyla çocuk etkinliğine girdiğinde, yukarı gezinme düğmesini tıklatmak kullanıcıyı ana etkinliğe götürmez; bunun yerine uygulamayı sonlandırır.Bildirimden başlatılan çocuk etkinliği, yukarı gezinme sırasında üst öğeye dönmez

Bildirim tıklatıldığında başlatılması gereken etkinlik açıklamardır. Ben bildirimi ve amaçları oluşturmak nerede bir ebeveyn İşte TabbedActivity

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

edilir vardır:

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(); 

Sonra hedef faaliyeti içinde

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); 
    } 
} 

onları göndermek, ben etkinleştirmek yukarı ok ve yukarı gezinme:

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

Kılavuzları doğru şekilde takip ettiğime inanıyorum. Öyleyse, kullanıcı neden ana etkinliği üstlenmiyor? aşağıdaki gibi yeni bir arka yığını ile faaliyetini başlarsanız

cevap

6

documentation gereğince, siz, onOptionsItemSelected() geri arama uygulamalıdır:

@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

kabul cevaba eklemek için, ben isTaskRoot() çek eklersiniz:

if (NavUtils.shouldUpRecreateTask(this, upIntent) || isTaskRoot()) { 

     /* ... */ 

} 

Uygulama bildirimden başlatıldığında, başlatılan Etkinlik uygulamanın yığınının bir parçasıdır, ancak yine de ebeveynler için rekreasyon işini istiyoruz.

İlgili konular