#android #android-activity #android-architecture-components #android-architecture-navigation
#Android #android-activity #android-архитектура-компоненты #android-архитектура-навигация
Вопрос:
Я впервые использую навигационный компонент Android, а также я новичок в компоненте архитектуры Android. Насколько я видел, навигационный компонент в архитектуре Android использует fragment преимущественно для навигации в рамках одного и того же действия. Я пытался перейти от одного действия к другому с помощью навигационного компонента:
activity.finish()
Navigation.findNavController(btnView).navigate(R.id.activity)
Здесь R.id.activity
указан идентификатор действия, определенный в XML-файле navigation graph.
Когда я нажимаю кнопку «Назад», я все еще могу видеть предыдущий экран. Мой вопрос заключается в том, как работает обратный стек в навигационном компоненте и почему появляется мое первое действие, даже если вызывается метод destroy действия (из-за activity.finish()
)?
Ответ №1:
Я могу ответить на вашу вторую часть за первую часть, кто-то, кто лучше поймет, объяснит вам.
Выполнение приведенного ниже метода не завершит ваше действие, потому что, если оно было завершено, вы не видите его в обратном стеке.
Активность.завершить ()
завершите текущее действие после метода навигации. Ниже будет показан правильный способ завершения текущего действия.
btn.setOnClickListener{
Navigation.findNavController(btnView).navigate(R.id.secondActivity)
(activity as currentActivity).finish()
}
Комментарии:
1. Хайдер, явное приведение к типу с использованием оператора as не требуется. Я обнаружил ошибку, которую я сделал. Просто чтобы поделиться с вами ошибкой, которую я допустил, чтобы это могло принести пользу другим, я использовал два фильтра намерений для одного действия, я не использовал режим запуска singleTop, поэтому действие создается дважды, поэтому кажется, что действие не уничтожено