Skip to content

TroubleShooting ‐ Navigation 백스택 오류

EunhoKang edited this page Dec 5, 2023 · 2 revisions

문제 상황

image

다음의 과정에서 오류가 발생한다.

  1. Fragment에서 navigationController.navigate()로 화면 전환
  2. 백스택 pop()을 통해 기존 화면으로 이동
  3. 다시 navigationController.navigate()로 같은 Fragment로 전환하려 하면 오류 발생

발생 원인

  • 버튼 클릭과 같은 사용자 로직은 네비게이션 액션을 두 번 이상 호출할 수 있다
  • a->b 액션이 두 번 이상 발생하게 되면 백스택으로 한번 pop해서 이전 스택으로 돌아와도 초기화되고 이 때문에 에러가 발생

해결 방안

private fun NavController.safeNavigate(direction: NavDirections) {
    currentDestination?.getAction(direction.actionId)?.run { navigate(direction) }
}
  • 액션이 두 번 트리거되지 못하도록 현재 목적지에 해당 액션이 있는지 확인
  • 여러 번의 네비게이션 액션이 발생하더라도 유효한 한 번의 액션만 허용한다

참고 링크

Clone this wiki locally