Как выйти из текущей деятельности в Homestreen (без использования кнопки «Дома»)?
-
02-10-2019 - |
Вопрос
Я уверен, что на это будет ответить, но я оказался неспособным найти это. Так что извините за мою избыточность.
То, что я пытаюсь сделать, это подражать кнопке «Дома», которая возвращает один в 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.