[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'
종속성을 추가하여 사용할 필요가 없다고 한다.
'모바일 > Android_Java' 카테고리의 다른 글
[Android] ViewModel clear(초기화) 및 데이터가있는 livedata duplicate observe (0) | 2022.02.23 |
---|---|
[Android] 특수문자 제거 (0) | 2022.02.16 |
[Android] CheckBox CompoundButton.OnCheckChangeListener not working first call (0) | 2021.12.23 |
[Android] avd(emulator) 경로 변경 (0) | 2021.12.07 |
[Android] textview in ConstraintLayout cutoff(잘림 현상) (0) | 2021.11.30 |