Как выйти из текущей деятельности в Homestreen (без использования кнопки «Дома»)?

StackOverflow https://stackoverflow.com/questions/2758786

Вопрос

Я уверен, что на это будет ответить, но я оказался неспособным найти это. Так что извините за мою избыточность.

То, что я пытаюсь сделать, это подражать кнопке «Дома», которая возвращает один в Homestreen Android. Итак, вот что вызывает у меня проблемы:

  • У меня есть 3 мероприятия по запуску. Первый (который подключен к значке Homestreen) - это просто (защищенная паролем) деятельность по конфигурации. Он не будет использоваться пользователем (только администратор)
  • Один из других 2 (оба доступных через виджет приложения) - это приложение для вопросника. Я разрешаю прыгать обратно между вопросами через кнопку сзади или кнопку с GUI Back. Когда анкета закончена, я суммирую данные ответы и предоставляю кнопку «Отделка», которая должна вернуть пользователя обратно на домашний экран.

Для приложения вопросника я использую одно действие (называемое Itemactivity), которое называется самой рекурсией при использовании намерений?), Чтобы прыгнуть с одного вопроса на другой:

Questionnaire.serializeToXML();  
Intent i = new Intent().setClass(c, ItemActivity.class);  
if(Questionnaire.instance.getCurrentItemNo() == Questionnaire.instance.getAmountOfItems()) {  
    Questionnaire.instance.setCompleted(true);  
} else Questionnaire.instance.nextItem();  
startActivity(i);

На последнем экране показано что -то вроде «Спасибо за участие», а также ранее описанная кнопка, которая должна вернуться к домашнему сущности. Но я действительно не понимаю, как правильно выйти из деятельности. Я, например, использовал this.finish(); Но это странно поднимает экран «Спасибо». Итак, как я могу просто выйти, отпрыгнув обратно в домашний запас ??

Извините за неудобство.
С уважением,
Штефф

Это было полезно?

Решение

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

Что вы можете попробовать сделать, чтобы исправить это: 1) Используйте finish() Каждый раз после начала нового деятельности для другого вопроса (так что когда -либо есть только один вопрос, открытый за раз), или 2) посмотрите, сможете ли вы использовать флаг намерения clear_top. Это начинает целевую деятельность, убивая все, что могло быть над ним в стеке. Например, если у вас есть действия: A, B, C, C, C, C, C (и т. Д. Для каждого вопроса), то запуск A с clear_top убьет все экземпляры B и C. Вы можете вписать это в свою структуру программы Изменив первый экран, который пользователь видит, когда начинает вопросник. Это покажет «приветственное» сообщение по умолчанию с кнопкой, чтобы запустить вопросник. Однако, если бы он начался с определенного значения, связанного с намерением, оно отобразило бы сообщение «Спасибо».

Если вы сделаете это, то однажды вы finish() Заявление A, пользователь будет возвращен туда, где они были до того, как запустили ваше приложение - предположительно, Homestreen, если оно будет начато с AppWidget.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top