기록

[Android] Navigation action cannot be found in the current destination 오류 해결 본문

[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)
    }
}

 

 

반응형