2016-01-28 2 views
0

Если у меня есть такие мероприятия, как следующий путь,активность назад навигация

A --> B --> C --> D 

В настоящее время я нахожусь в деятельности D. Так что если я хочу, чтобы вернуться непосредственно в B, то как это возможно?

Я сделал следующий путь.

List<Activity> activities = new ArrayList<>(); 

Этот список будет иметь все загруженные деятельности, что означает деятельность добавлена ​​в этот список по onCreate() методы.

Так в настоящее время этот список будет A, B, C, D, Так что, если хотите, чтобы вернуться непосредственно B то, что я буду делать это получить последние два действия из этого списка и закончить его с помощью finish(). Я знаю, что это не так.

Так что я хочу знать, есть ли лучший способ сделать это или нет ?.

Примечание: В некоторых случаях только я пойду на активность B напрямую, поэтому я не могу закончить C во время запуска активность D.

Update

Также я могу пойти вернуться к заданию A непосредственно из Activity D, так что мой вопрос:

Я могу пропустить любую деятельность в любое время, а также вернуться к y деятельность в любое время

Возможно ли это?

+0

при переходе от C к D, просто завершите работу C.Когда вы нажмете назад, он сразу перейдет к операции B –

+0

@DemoMail. Я добавил примечание, пожалуйста, взгляните на него. – Gunaseelan

+0

В этом случае вы можете явно повторить эту операцию снова с помощью намерения в обратном направлении. –

ответ

2

Вы, вероятно, следует использовать startActivityForResult при запуске активность D от активность C.

Всякий раз, когда вы хотите, чтобы закончить Activity C, убедитесь, что вы setResult (RESULT_OK) в активность D, когда вы собираетесь закончить.

И активность C, переопределить onActivityResult и выполните следующие действия:

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 

    if (resultCode != RESULT_OK) 
     return; 

    if (requestCode == REQUEST_CODE_SHOULD_FINISH_ACTIVITY) { 
     //add any other code you might wanna add 
     finish(); 
    } 
} 
+0

Хорошо, добавлено +1, Но что, если я перейду непосредственно к Activity A. Так что мой вопрос: я может вести переговоры о любой деятельности в любое время, а также возвращаться к любой деятельности в любое время. – Gunaseelan

+0

Ну, вы можете сделать то же самое для Activity A, или даже если я не поклонник этого, вы можете сделать свой собственный стек действий так же, как и то, что вы сделали. Но вместо того, чтобы вставлять каждое действие в onCreate, вы должны создать свой собственный файл приложения и сделать registerActivityLifecycleCallbacks() в своем onCreate. Вместо этого создайте вместо этого свой стек активности. –

0

Я думаю, что Вы должны использовать IntentFlag, чтобы очистить всю предыдущую activty. вы должны прочитать это руководство для более четкого определения.

Main Reference : http://developer.android.com/guide/components/tasks-and-back-stack.html

Source : http://tips.androidhive.info/2013/10/how-to-clear-all-activity-stack-in-android/

Intent i = new Intent(D.this, B.class); 
// set the new task and clear flags 
i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); 
startActivity(i); 
0

можно реализовать отдельный OnBackPressed() для каждого вида деятельности и перейти к любой деятельности, которую вы хотите, но если вы хотите сохранить экземпляр текущей деятельности и вам необходимо использовать метод StartActivityForResult().

0

Используйте метод onBackPressed для вашего D Actvity следующим образом.

@Override 
    public void onBackPressed() { 
     super.onBackPressed(); 
Intent i = new Intent(D.this, B.class); 
startActivity(i); 
    } 
Смежные вопросы