2015-08-27 131 views
1

我想要做的是在Android中創建一個通知,當它被點擊時將會打開一個活動。這個活動被稱爲「NotificationsActivity」,其父代是「MainActivity」。無論何時向用戶展示NotificationsActivity,我都希望他們能夠按下後退按鈕以訪問MainActivity。我一直在使用這裏的說明(http://developer.android.com/guide/topics/ui/notifiers/notifications.html#DirectEntry)試圖讓這個工作。但是,無論我嘗試什麼,每當我從NotificationsActivity中按回時,該應用程序都會完全退出。我能想到的唯一問題是我的應用程序有一個登錄屏幕,我也將其識別爲MAIN和LAUNCHER。我不認爲這會造成問題,但這是我能想到的。TaskStackBuilder沒有按預期工作

總結。我要的是:

  1. 點擊通知
  2. 打開NotificationsActivity
  3. 按返回
  4. 打開MainActivity

但是我得到的是:

  1. 點擊通知
  2. 打開NotificationsActivity
  3. 按返回
  4. 退出應用

相關代碼顯示如下。

從AndroidManifest.xml中:

<activity 
    android:name=".LoginActivity" 
    android:label="@string/app_name" 
    android:launchMode="singleTop" 
    android:noHistory="true" > 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
     <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter> 
</activity> 
<activity 
    android:name=".MainActivity" 
    android:label="@string/app_name"> 
    <intent-filter> 
     <action android:name="android.intent.action.MAIN" /> 
    </intent-filter> 
</activity> 
<activity 
    android:name=".NotificationsActivity" 
    android:parentActivityName=".MainActivity" > 
    <meta-data 
     android:name="android.support.PARENT_ACTIVITY" 
     android:value=".MainActivity" /> 
</activity> 

這是我的Java代碼:

private void notifyRecordChanges(){ 
    String notificationText = "test notification"; 
    Context context = this; 

    NotificationCompat.Builder builder = 
      new NotificationCompat.Builder(context) 
        .setSmallIcon(R.drawable.ic_notify) 
        .setAutoCancel(true) 
        .setContentText(notificationText); 
    // Creates an explicit intent for an Activity in your app 
    Intent resultIntent = new Intent(context, NotificationsActivity.class); 
    TaskStackBuilder stackBuilder = TaskStackBuilder.create(context); 
    // Adds the back stack for the Intent (but not the Intent itself) 
    stackBuilder.addParentStack(NotificationsActivity.class); 
    // Adds the Intent that starts the Activity to the top of the stack 
    stackBuilder.addNextIntent(resultIntent); 
    PendingIntent resultPendingIntent = 
      stackBuilder.getPendingIntent(0, PendingIntent.FLAG_UPDATE_CURRENT); 
    builder.setContentIntent(resultPendingIntent); 
    NotificationManager notificationManager = 
      (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); 

    notificationManager.notify(1, builder.build()); 
} 

編輯:我從項目中刪除的LoginActivity類,它並沒有區別。所以,現在我不知道我做錯了什麼。

SECOND EDIT: 要添加到Skizo的答案,我必須支持操作欄上的後退按鈕。這是處理該問題的代碼。我從Skizo提供的方法覆蓋和下面的代碼中調用「goBack」。

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch(item.getItemId()){ 
     case android.R.id.home: 
      goBack(); 
      break; 
    } 
    return super.onOptionsItemSelected(item); 
} 
private void goBack(){ 
    Intent intent = new Intent(getApplicationContext(), MainActivity.class); 
    startActivity(intent); 
    finish(); 
} 
+0

是否有logcat的任何錯誤? –

+0

完全沒有錯誤。通常如果應用程序崩潰,我甚至不會在最近的列表中看到它。但是,在這種情況下,它仍然在最近出現。 – nybblesAndBits

回答

1

NotificationsActivity只重載onBackPressed()

複製粘貼&這種方法:

@Override 
public void onBackPressed() { 
// super.onBackPressed(); 
Intent intent = new Intent(getApplicationContext(), MainActivity.class); 
startActivity(intent); 
finish(); 
} 
+0

謝謝!那讓我一半在那裏。它只適用於硬件後退按鈕。操作欄上的後退按鈕仍然退出。我通過添加此代碼來解決這個問題。算了。我無法讓代碼在這裏正確顯示。我將編輯帖子並放在那裏。 – nybblesAndBits

+0

@nybblesAndBits所以你的問題解決了? –

+0

我應該添加一些東西給我的答案?如果你解決了這個問題,或者我幫助你解決它,感覺自由喲upvote或將其標記爲正確^^ –