2015-12-16 6 views
2

Say, я ниже активностьAndroid запуск деятельности на вершине конкретной деятельности

Activity A, Activity B, Activity C and Activity D 

В настоящее время стек оказывает ниже Входа

Activity C 
Activity B 
Activity A 

я должен запустить Activity D так, чтобы стек стал, как показано ниже,

Activity D 
Activity A 

Какой флаг мне нужно установить?

+0

от деятельности которых вы хотели вызвать активность D? – Shiva

+0

@Shiva От Activity C –

+0

Предполагая, что вы вызываете Activity A -> Activity B -> Activity C -> Activity D. Если этот поток, установите флаг намерения FLAG_ACTIVITY_SINGLE_TOP в намерения, которые вы вызываете для Activity B и Activity C. Так, что в стеке действия будет содержать только активность А и операцию D. – Shiva

ответ

3

Рассмотрите возможность использования A в качестве диспетчера. Если вы хотите запустить D из C и закончить C и B в процессе, сделать это в C:

// Launch A (our dispatcher) 
Intent intent = new Intent(this, A.class); 
// Setting CLEAR_TOP ensures that all other activities on top of A will be finished 
// and setting SINGLE_TOP ensures that a new instance of A will not 
// be created (the existing instance will be reused and onNewIntent() will be called) 
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP|Intent.FLAG_ACTIVITY_SINGLE_TOP); 
// Add an extra telling A that it should launch D 
intent.putExtra("startD", true); 
startActivity(intent); 

в A.onNewIntent() сделать это:

@Override 
protected void onNewIntent(Intent intent) { 
    if (intent.hasExtra("startD")) { 
     // Need to start D from here 
     startActivity(new Intent(this, D.class)); 
    } 
} 
+0

Таким образом, нам нужно запустить Activity-A ненужным. Я не ищу никакого обходного пути вместо модульного флага для этого. –

+0

Для этого нет флагов. Вы не запускаете деятельность без необходимости. Активность A уже запущена. Вы просто возвращаетесь к активности A и говорите ему, чтобы начать эту деятельность для вас. –

+0

Это не «обходной путь». Это правильная схема навигации. Есть другие навигационные патерны, которые вы могли бы использовать. Но вы не можете сделать это, используя флаги Intent. –

1

Вы попробовали?

<activity name="Activity D" 
    android:allowTaskReparenting="true" 
    android:taskAffinity="Activity A" > 
+3

Вы попробовали? Потому что это не работает. Это не имеет ничего общего с задачами и задачами репарации. Все действия выполняются в одной и той же задаче. –

+0

@DavidWasser Да, он не работает ... –

Смежные вопросы