[Android] TabLayoutMediator (tabselectedListener not call + viewPager not changed)

2022. 1. 7. 09:16모바일/Android_Java

[Android] TabLayoutMediator

new TabLayoutMediator(tabLayout, viewPager2, new TabLayoutMediator.TabConfigurationStrategy() {
            @Override
            public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {

            }
        }).attach();
  • 첫번째 인자 Tablayout
    • CustomTabLayout 일 경우에는 this
  • 두번째 인자는 ViewPager

적용순서

ViewPager2의 Adapter를 ViewPager2에 set해준후에 선언해주어야 합니다.

왜냐하면 attach()메소드 내에서

adapter = viewPager.getAdapter()

라는 코드가 있기 때문입니다.

getBinding().viewPager.setAdapter(tabMenuAdapter);
new TabLayoutMediator(tabLayout, viewPager2, new TabLayoutMediator.TabConfigurationStrategy() {
            @Override
            public void onConfigureTab(@NonNull TabLayout.Tab tab, int position) {

            }
        }).attach();

겪은 문제

탭을 클릭했을때 탭은 바뀌는데 viewPager의 화면이 변경되지 않는 현상이 있었습니다. 문서를 찾아보니

TabLayoutMediator listens to TabLayout's OnTabSelectedListener to adjust VP2 when tab moves.

https://developer.android.com/reference/com/google/android/material/tabs/TabLayoutMediator

라하여 pager를 set하는 함수를 가로채가는?것으로 보였습니다.

따라서 attach를 한 후에 다시 탭체인지 리스너를 설정해주고 onTabSelected함수에

listner.onTabSelected();

를 추가해주어야 했습니다..

이걸왜쓰지

https://stackoverflow.com/questions/55372259/how-to-use-tablayout-with-viewpager2-in-android

에 의하면

implementation 'com.google.android.material:material:1.2.0-alpha02'

종속성을 추가하여 사용할 필요가 없다고 한다.