2010-12-03 3 views
9

В моем приложении я запускаю «мастер» из восьми шагов с моей целевой страницы, на которой данные передаются с шага 1, вплоть до шага 8. Для сохранения данных в неповрежденном состоянии шаги, я не называю finish() в любом из действий. Однако, когда все шаги завершены, есть ли способ закрыть все 8 запущенных мной операций и вернуться на целевую страницу?Закрытие активности после щелчка на кнопке

иллюстрацией сортов здесь:

Главная - Шаг 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8

В этот момент, когда пользователь нажмите «Сохранить», закройте все шаги (8) и вернитесь на главную страницу. Я создаю новое намерение сделать это до сих пор, но я понимаю, что это не лучшее решение. Простой задний пресс возвращает его к 7-му шагу.

Любая помощь приветствуется.

+0

«Для хранения данных без изменений в то время как между ними» ... Не уверен, что вы подразумеваете под этим, но имейте в виду, что вы не можете гарантировать, что один из видов деятельности не будет закрыт Android после того, как он находится в задний план. Убедитесь, что вы не зависите от их присутствия. – 2010-12-03 19:51:36

+0

@ Майра: есть ли в любом случае я могу запретить Android закрывать какие-либо действия? Я не думаю, что шаги будут занимать больше пары минут, в идеале, по крайней мере. Но вы никогда не сможете быть слишком уверенными. – 2010-12-03 20:07:52

+1

Нет, вы не можете. Оформить документацию по жизненному циклу деятельности для получения дополнительной информации: http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle. Вы должны надлежащим образом обрабатывать остановку и перезапуск в любом случае, в случае, когда кто-то нажимает на ваше приложение и приходит вернемся к нему. – 2010-12-03 21:08:22

ответ

20
Intent intent = new Intent(this, Home.class); 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); 
startActivity(intent); 

Это убьет все действия между 8-м экраном и запустит ваш домашний экран. Кроме того, u может установить acitivty для главного экрана ur в манифесте launchmode = "singleTop". см. эту ссылку - developer.android.com/guide/topics/fundamentals.html#acttask

4

Другим подходом было бы использовать StartActivityForResult (...), чтобы начать каждое действие и иметь действия, вызывающие setResult() перед финишем(). Затем в методе onActivityResult каждого действия (...) метод заканчивается(), если цель не равна нулю.

Это создаст полный стек и автоматически завершает их при завершении последней.

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

    if (data == null) { 
     return; // back button, resume this activity 
    } 

    // Propagate result down the stack. 
    setResult(0, data); 
    finish(); 
} 

Это дает вам немного больше контроля и позволяет оригинальное активность получить результат через onActivityResult, а не создавать намерения, которые могли бы быть более понятным, если первоначальный запрос другого государства вы хотите сохранить (в его начале в частности).

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