기록
[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)
}
}
반응형
'[Study] > Android' 카테고리의 다른 글
1. 기초적인 RecyclerView부터 시작하기 (0) | 2023.04.27 |
---|---|
[Android] Hilt의 @Bind로 유지보수 쉽게 하기 (0) | 2023.01.12 |
[Android] editText 바깥 부분을 클릭하면 키보드 내려가게 하는 법 (0) | 2022.10.20 |
[Android] include 태그로 layout 재사용하기 (0) | 2022.10.02 |
[Android] LiveData (0) | 2022.09.29 |