Как я могу вернуться к своей основной деятельности из другой деятельности, которая находится в стеке более одного?
У меня есть главное меню с кучей кнопок. Одна кнопка запускает новое действие, которое позволяет пользователю заполнить и отправить форму. Когда пользователь отправляет форму, начинается третье действие, в основном просто экран с некоторым содержанием и кнопкой для возврата в главное меню. Однако, когда я создаю намерение и перехожу к основному действию, setContentView() не работает, и мои назначения кнопок вызывают исключение NullPointerException.
Я знаю, что есть какой-то способ вернуться в стек, либо с помощью флагов намерений, либо с помощью метода finish(). У меня не было успеха с флагами намерений, такими как Intent.FLAG_ACTIVITY_CLEAR_TOP
, finish () не будет работать, так как я в двух действиях, а не в одном. Как правильно вернуться к основной деятельности?
Спасибо
4 ответа
Есть множество способов сделать это. Самым простым может быть вызов метода finish() для второго действия после запуска намерения, что-то вроде этого:
startActivity(activity3intent);
finish();
Это удалит ваше второе действие из стека, когда начнется третье. Затем ваша кнопка MainMenu может просто вызвать финиш на третьем действии, возвращая вас к первому.
Если вы предпочитаете делать это с флагами намерений, попробуйте добавить это в намерение, которое вызывает упражнение 1 из занятия 3:
activity1intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
Это снова сфокусирует деятельность 1 и очистит все, что было выше в стеке. Флаг CLEAR_TOP обрабатывает избавление от остальной части стека, но IIRC не запустит новый экземпляр Activity, если он уже существует в стеке. Если вы хотите запустить новый экземпляр Упражнения 1, не используйте никаких флагов, а вызывайте finish() после того, как оба занятия 2 и 3 отправили свои намерения, чтобы к ним нельзя было получить доступ через обратную навигацию.
Если пользователь заполнил и отправил вашу форму, попробуйте закрыть свою деятельность, вызвав метод finish() в слушателе кнопки, которая отправляет форму.
Вы также можете создать статический класс, содержащий все действия, чтобы вы могли правильно обрабатывать их. Это очень полезно и крайне неэффективно, но неважно.
В упражнении 2, если вы позвоните startActivity(yourIntent); finish()
это должно позволить вам вернуться к занятию 1, когда оно закончится.