Закрытие деятельности стека после нажатия кнопки - PullRequest
10 голосов
/ 03 декабря 2010

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

Вот такая вот иллюстрация:

В начало - Шаг 1 -> 2 -> 3 -> 4 -> 5 -> 6 -> 7 -> 8

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

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

Ответы [ 2 ]

20 голосов
/ 03 декабря 2010
Intent intent = new Intent(this, Home.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

Это убьет все действия между вашим восьмым экраном и вернет ваш экран гома обратно. Также вы можете установить активность домашнего экрана в манифесте launchmode = "singleTop". см. эту ссылку - developer.android.com / guide / themes / basicmentals.html # acttask

5 голосов
/ 03 декабря 2010

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

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

@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, а не намерение создания, что может быть более интуитивно понятным, если исходный запрос имеет другое состояние, которое вы хотите сохранить (в его начальном намерении, в частности, ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...