Как уничтожить activity при переходе в другое activity через navigation drawer?
Имеется 5 activity и фрагменты. Т.е. в навигации это - к каждой активити привязан фрагмент указанный как стартовый и + дальнейшие фрагменты из которых можно вернуться к стартовому фрагменту, (т.е. 5 navGraph'ов как отдельные ветки).
Как сделать так, чтобы при переходе через Navigation Drawer (боковое меню) из одной activity в другое, предыдущее activity уничтожилось. Т.е. нужно, чтобы при переходе из "activivty A" в "Activity B" А уничтожилась и при нажатии на кнопку "назад" (уже в В) приложение закрывалось (а не переходило обратно в предыдущее активити). Как это можно реализовать для 5-ти или более activity на Kotlin'e?
P.S. В данный момент сколько бы раз не сделал переходов между активити через боковое меню, столько же раз приходится нажимать кнопку back (назад). Рассматривал вариант с флагами, и вариант с указанием закрытия предыдущей активити при старте следующей, правда не понял как реализовать, т.к. новичок.
Ответы (2 шт):
У вас довольно сложная система как на мой взгляд, поэтому я напишу как убивать активность при переходе в intent:
val msgIntent = Intent(this, MyActivity.class)
startActivity(msgIntent)
finish()
при переходе ключевым является:
finish()
что означает завершение активности после интента. Так же есть возможность использовать флаги для интента:
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
вместо finish() можно использовать finishAfterTransition() - завершить активность после перехода. У вас не получается свернуть приложение кнопкой "Назад" потому что в стеке есть и другие активности, а кнопкой назад вы завершаете текущую, чтобы данной кнопкой свернуть приложение можно использовать такой вариант:
val startMain = Intent(Intent.ACTION_MAIN)
startMain.addCategory(Intent.CATEGORY_HOME)
startMain.flags = Intent.FLAG_ACTIVITY_NEW_TASK
startActivity(startMain)
finish()
Нашел решение на свой вопрос, хотя это не совсем то, что я хотел реализовать, но по крайней мере теперь нет бесконечно растущего стека.
Решение было в очистке стека методом установки атрибута android:launchMode="singleTask" для каждой Activity в манифесте (подробнее https://habr.com/ru/post/186434/). Возможно это не лучшее решение, но более удобного и понятного в реализации метода я пока не нашел.
На счет использования Intent, у меня не получилось сделать так, чтобы очистка стека проходила именно после перехода и чтобы это было более универсальным решением. Более конкретно - как я понял нужен перехват какого-либо действия.