본문 바로가기
프로그래밍/App 개발

[Android] 'FragmentManager is already executing transactions' error when changing fragment of bottomnavigationview programmatically (AAC Navigation)

by 엽기토기 2022. 3. 3.
반응형

 

bottomnavigationview의 fragment 를 강제로 바꿔주는 코드를 구현 중이었음.

val bottomNav = activity?.findViewById<BottomNavigationView>(R.id.bottom_nav)
bottomNav?.selectedItemId = R.id.dreamlist

근데 터짐. 어떻게 해결할 것인가.

 

먼저, navigation 이동 시에 fragment 재생성을 방지하도록 아래 코드(KeepStateNavigator) 를 사용하고 있었다.

https://github.com/STAR-ZERO/navigation-keep-fragment-sample/blob/master/app/src/main/java/com/star_zero/navigation_keep_fragment_sample/navigation/KeepStateNavigator.kt

 

GitHub - STAR-ZERO/navigation-keep-fragment-sample

Contribute to STAR-ZERO/navigation-keep-fragment-sample development by creating an account on GitHub.

github.com

 

근데 여기서 

transaction.commitNow()

이 녀석이 문제였다.

 

transaction.commit()

으로 바꿔주면 해결된다.

 

commitNow는 commitNow 하려는 transaction이 백스택에 있으면 안된다.

commit은 비동기적으로 transaction을 수행한다.

 

[Reference]

https://medium.com/hongbeomi-dev/%EB%B2%88%EC%97%AD-%EB%8B%A4%EC%96%91%ED%95%9C-%EC%A2%85%EB%A5%98%EC%9D%98-commit-8f646697559f

 

[번역]다양한 종류의 commit()

FragmentTransaction에 적절한 commit()을 사용해봅시다.

medium.com

https://ichi.pro/ko/jiwon-laibeuleoli-25-1-0ui-saeloun-gineung-androidneun-onbackstackchanged-eseo-commitnow-leul-heoyonghaji-anhseubnida-37917667815346

 

지원 라이브러리 25.1.0의 새로운 기능, Android는 onBackStackChanged ()에서 commitNow ()를 허용하지 않습니

최근에 지원 라이브러리 24에서 최신 지원 라이브러리로 앱을 업그레이드했습니다.

ichi.pro

 

반응형