2017-02-09 74 views
4

在我的申請中,我創建了一個通知,開始詳情活動。我想將此活動添加到當前任務(或返回堆棧)的頂部。例如,我想到的應用任務(回棧),以這樣的表現:如何在點擊通知時保留當前的後退堆棧(或任務)?

enter image description here

,但我得到這個:

enter image description here

我沒用過FLAG_ACTIVITY_CLEAR_TASKFLAG_ACTIVITY_NEW_TASK標誌。我該怎麼辦?

編輯:第一張圖片只是一個例子。我認爲這個問題的標題是完全明確的。我想在當前堆棧頂部添加詳細信息活動,而不是以新任務開始。

這是我如何創建PendingIntent

// Details activity intent 
    Intent intent = new Intent(context, DetailsActivity.class); 
    intent.putExtra(Com.KEY_ID, event.getId()); 
    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, 
      intent, PendingIntent.FLAG_UPDATE_CURRENT); 

這是清單:

<activity 
     android:name=".MainActivity" 
     android:label="@string/app_name_system" 
     android:launchMode="singleTop" 
     android:theme="@style/AppTheme.NoActionBar"> 

     <intent-filter> 
      <action android:name="android.intent.action.MAIN" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

    <activity 
     android:name=".NoteActivity" 
     android:label="@string/app_name_system" 
     android:theme="@style/AppTheme.NoActionBar" 
     android:windowSoftInputMode="stateHidden" /> 

    <activity 
     android:name=".DetailsActivity" 
     android:launchMode="singleTop" 
     android:label="@string/app_name_system" 
     android:theme="@style/AppTheme.NoActionBar" /> 
+0

你嘗試設置標誌'Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP'意圖? – sup4eli

+0

@ sup4eli我現在做了,但沒有結果。 –

回答

2

可以使用PendingIntent.getActivities代替PendingIntent.getActivity打造您疊加。

Intent mainActivityIntent = new Intent(context,MainActivity.class); 
mainActivityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

Intent noteActivityIntent= new Intent(context,NoteActivity.class); 
noteActivityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 

Intent detailActivityIntent= new Intent(context,DetailActivity.class); 

final PendingIntent pendingIntent = PendingIntent.getActivities(ctx, UNIQUE_REQUEST_CODE++, 
      new Intent[] {mainActivityIntent,noteActivityIntent,detailActivityIntent},PendingIntent.FLAG_UPDATE_CURRENT); 

這應該解決你的目的。

參考更多詳細信息Back to main activity from notification-created activity

+0

我認爲這是要走的路,但我已經附加了一些解釋的問題。我想將DetailsActivity添加到**當前**堆棧,無論它是什麼。我認爲你的解決方案總是給主要>筆記>細節。是這樣嗎? –

+0

是的,我的解決方案將始終給這個堆棧 - Main> Note> Details.It實際上啓動新的DetailActivity與兩個活動意圖在堆棧中。這兩個意圖將被觸發,並將在後退按鈕上創建兩個新的活動實例。但是,這不會將活動添加到當前堆棧。 –

1

您需要使用getActivities(),並指定在接受意圖數組的第三個參數的整個導航路徑此鏈接。您需要按照您的應用導航應該工作的順序來構建該數組,即最左邊的是根/主要活動,並且從那裏繼續向下。

像這樣的事情

Intent mainActivityIntent = new Intent(context, MainActivity.class); 
mainActivityIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); // only specify new task flag for MainActivity 

Intent noteActivityIntent= new Intent(context,NoteActivity.class); 

Intent detailsActivityIntent = new Intent(context, DetailsActivity.class); 

PendingIntent pendingIntent = PendingIntent.getActivities(context, 0, 
      new Intent[] {mainActivityIntent,noteActivityIntent,detailsActivityIntent},PendingIntent.FLAG_UPDATE_CURRENT); 

需要注意的是:如果你的應用程序已經是活動的,一旦你按下背面Android將帶你回到你的NoteActivity,然後MainActivity。如果它們已經在那裏,它將重新開始活動,否則將創建新的活動。

+0

圖片只是一個例子。我想將DetailsActivity添加到當前堆棧的頂部。不要總是在Main> Note> Details中開始。 –

1

我發現此鏈接:Preserving Navigation when Starting an Activity。雖然它沒有提供我的問題的確切解決方案,但它產生了所需的結果。

該鏈接描述我們應該在一個新的任務中以不同的親和性開始DetailsActivity

清單:

<activity 
     android:name=".DetailsActivity" 
     android:excludeFromRecents="true" 
     android:label="@string/app_name_system" 
     android:launchMode="singleTop" 
     android:taskAffinity="" 
     android:theme="@style/AppTheme.NoActionBar" /> 

PendingIntent創作:

Intent intent = new Intent(context, DetailsActivity.class); 
    intent.putExtra(Com.KEY_ID, event.getId()); 
    intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 
    PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, 
      intent, PendingIntent.FLAG_UPDATE_CURRENT);