[Android] BottomNavigationView setOnNavigationItemSelectedListener is deprecated.

김병수·2021년 8월 11일
3
post-thumbnail

오늘은 그나마 최근(?)에 Deprecated된 BottomNavigationView.setOnNavigationItemSelectedListener에 대해 포스팅 하려고 한다.

Deprecated 된 이유부터 알아보자

우선 이 글의 작성일인 2021년 08월 11일을 기준으로,
안드로이드 공식 문서에 setOnNavigationItemSelectedListener가 deprecated 되었다는 표시는 존재하지 않았다.

하지만 Github에 공개되어 있는 소스코드를 보면

확실히 deprecated 되었다는 것을 확인할 수 있었지만, deprecated 된 이유는 알 수 없었다.

그래서 commit을 확인해 봤는데

The listeners were deprecated in favor of NavigationBarView#OnItemSelectedListener and NavigationBarView#OnItemReselectedListener, but deprecation documentation was never added, so it's unclear what developers should use instead.

라는 내용이 적혀있었다.

여기서 나는 "it's unclear what developers should use instead." 라는 부분을 보자마자 엥? 이게뭐야?? 싶었다.
대체해서 사용할 함수가 확실하지 않다니..

그래서 바로 stackoverflow에 검색을 했고, setOnNavigationItemSelectedListener 대신에 사용할 함수를 발견했다.


해결방법

아래의 내용은 stackoverflow를 참고해서 작성한 내용입니다.

setOnNavigationItemSelectedListener

해결 방법은 간단하다.
BottomNavagationView의 부모 클래스인 NavagationBarViewsetOnItemSelectedListener를 사용하면 된다.

기존에 작성되어 있던 코드를

bottomNavBar.setOnNavigationItemSelectedListener { item ->
    when (item.itemId) {
        // add your code
    }
}

다음과 같이 수정하면 된다.

bottomNavBar.setOnItemSelectedListener { item ->
    when(item.itemId) {
        // add your code
    }
}

setOnNavigationItemReselectedListener

이 경우에도 마찬가지로 BottomNavagationView의 부모 클래스인 NavagationBarViewsetOnItemReselectedListener를 사용하면 된다.

기존에 작성되어 있던 코드를

bottomNavBar.setOnNavigationItemReselectedListener { item ->
    when(item.itemId) {
        // add your code
    }
}

다음과 같이 수정하면 된다.

bottomNavBar.setOnItemReselectedListener { item ->
    when(item.itemId) {
        // add your code
    }
}
profile
주니어 개발자

2개의 댓글

comment-user-thumbnail
2023년 11월 15일

와.. 1시간넘게 deprecated 찾고있었는데 덕분에 해결했어요 정말 감사합니다.

1개의 답글