[Study]/Android
[Android] Navigation action cannot be found in the current destination 오류 해결
Dannnnnn
2022. 11. 12. 11:59
반응형
개발 과정 중 navigation으로 fragment를 교환하는 작업을 할 때 다음과 같은 오류를 만난 적이 있을 지도 모릅니다.
잘못된 action을 참조하여 이러한 오류가 발생했다면 해당 액션을 올바르게 수정하여 어렵지 않게 에러를 해결할 수 있습니다.
이 포스트에서는 대부분의 모든 action이 정상적으로 수행되나, 때때로 해당 crash가 발생하며 코드상에서 명확한 원인을 찾기 어려운 경우에 대해 기술합니다.
문제 원인
이 문제는 다음과 같은 이유로 navigation action 호출 이벤트가 연속적으로 두 번 이상 트리거될 때 나타납니다.
1. 네트워크 응답 콜백, 센서 및 인터넷 연결 콜백과 같은 non-user에 의해 트리거된 콜백
2. 해당 이벤트를 호출하는 버튼 클릭, 뷰 이벤트와 같은 user에 의해 트리거된 콜백
findController.navigate()의 첫 번째 호출로 앱이 다른 화면(대상)으로 이미 이동한 상황에서, 동일한 작업을 수행하는 두번째 호출이 더 이상 정상적으로 수행될 수 없으므로 유효하지 않습니다.
특히 앱이 느릴 경우 이 문제가 발생할 확률이 높아질 수 있는데, 제 경우에는 리사이클 뷰가 있는 화면에서 작업을 하며 이 문제가 발생했습니다.
문제 해결
navigation action 이벤트가 여러번 호출되는 것을 방지하여 해결할 수 있습니다.
제 경우에는 확장함수로 navigation action이 현재 destination에 존재하지 않을 때 해당 이벤트를 트리거하지 않도록 했습니다.
fun NavController.safeNavigate(direction: NavDirections) {
currentDestination?.getAction(direction.actionId)?.run {
navigate(direction)
}
}
반응형