2017-02-09 2 views
4

В моей заявке, я создаю уведомление, которое начинается Подробности Активность. Я хочу добавить эту активность в начало текущая задача (или задний стек). Например, я ожидаю приложения задача (обратно стек), чтобы вести себя так:Как сохранить текущий задний стек (или задачу) при нажатии на уведомление?

enter image description here

, но я получаю это:

enter image description here

Я не использовал FLAG_ACTIVITY_CLEAR_TASK и FLAG_ACTIVITY_NEW_TASK флаги. Что мне делать?

Редактировать: Первое изображение является лишь примером. Я думаю, что заголовок вопроса полностью ясен. Я хочу добавить Подробности Activity поверх текущего стека, а не начинать с новой задачи.

Это, как я создаю 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 в ** текущий ** стек, что бы это ни было. Я думаю, что решение всегда дает Main> Note> Details. Это так? –

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

Обратите внимание, что: Если ваше приложение уже активно, как только вы нажмете назад андроид вернет вас к вашим NoteActivity, а затем MainActivity. Он перезапустит действия, если они уже существуют или создадут новое в противном случае.

+0

Изображение является лишь примером. Я хочу добавить DetailsActivity в начало текущего стека. Не всегда начинать с Main> Note> Details. –

1

Я нашел эту ссылку: Preserving Navigation when Starting an Activity. Хотя он не дает точного решения для моего вопроса, но он дает желаемый результат.

Ссылка описывает, что мы должны начать DetailsActivity в новой задаче с сродством.

Manifest:

<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); 
Смежные вопросы