[Android] setOnNavigationItemSelectedListener deprecated 해결
인스타그램 클론 코딩을 하는 도중, BottomNavigation을 만들면서 만난 issue입니다.
BottomNavigation의 리스너인 setOnNavigationItemSelectedListener를 이용하여 select 이벤트를 완성하려고 했는데, 이번에 업데이트를 하면서 deprecated 된 것을 발견했습니다.
그리고 깃허브의 material-compoents/material-components-android 의 소스를 보면 아래와 같이 명시되어 있습니다.
그리고 NavigationBarView.setOnItemSelectedListener를 대신 사용하라고 되어있죠?
또한 깃허브에서도 왜 deprecated 되었는지 알 수 없었습니다... 😓😕
🤷♀️ 그렇다면 NavigationBarView는 무엇일까..?
우선 공식 문서의 BottomNavigationView를 살펴보면
BottomNavigationView는 NavigationBarView를 extends 했다고 명시되어 있습니다. NavigationBarView는 BottomNavigation이나 Navigation Rail 구현에 사용할 수 있는 네비게이션 바의 추상적인 구현을 제공한다고 공식 문서가 설명하고 있습니다.
즉, 우리는 NavigationBarView의 리스너 인터페이스를 직접 사용하는 방법으로 대체하는 것입니다.
하지만 왜 deprecated를 해놓고 공식 문서에는 아무 설명을 해놓지 않았는지 의문입니다.. 아니면 제가 못찾은걸까요?
🚩 NavigationBar 구현 방법_Kotlin
사용 방법은 setOnNavigationItemSelectedListener과 같고
setOnItemSelectedListener로 메서드명만 대체하여 사용하면 된다! 해결 방법은 쉬웠습니다 🤔🧐
binding은 viewBinding을 사용했으므로...!
fun initNavigationBar() {
binding.navigationBar.run {
// ↓ 아래 메소드만 변경하여 해결
setOnItemSelectedListener { item ->
when(item.itemId) {
R.id.action_home -> {
changeFragment(HomeFragment())
}
...
}
true
}
selectedItemId = R.id.action_home // 초기값 세팅
}
}
reference >
- Android 공식 문서 - BottomNavigationView
- Android 공식 문서 - NavigationBarView.OnItemSelectedListener
- stackoverflow: setOnNavigationItemSelectedListener deprecated