Android

[Android/Kotlin] TabLayout & Viewpager2

dev_zoe 2021. 8. 20. 01:59
반응형

1) 기본 tablayout

 

class HomeFragment: BaseFragment<ViewpagerNestTabBinding>(ViewpagerNestTabBinding::bind,
    R.layout.viewpager_nest_tab) {

    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)

        val pagerAdapter = PagerFragmentStateAdapter(requireActivity())
        // 3개의 Fragment Add
        pagerAdapter.addFragment(TodoFragment())
        pagerAdapter.addFragment(MemoFragment())
        pagerAdapter.addFragment(RuleFragment())
        pagerAdapter.addFragment(NVFragment())
        pagerAdapter.addFragment(MemFragment())
        // Adapter
        binding.vpInner.adapter = pagerAdapter

        binding.vpInner.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
            override fun onPageSelected(position: Int) {
                super.onPageSelected(position)
            }
        })

        val tabTextArray = arrayOf("할일", "메모", "규칙", "공지/투표", "멤버")
        // TabLayout attach
        TabLayoutMediator(binding.nestTabTop, binding.vpInner) { tab, position ->
            tab.text = tabTextArray[position]
        }.attach()

        binding.vpInner.isUserInputEnabled = false //스와이프해서 탭 아이템 넘어가는것을 허용할것인지?
    }
}

 

2) tablayout의 tab 동적생성

    //서버에서 탭 목록 받아오고 난 뒤에 동적생성하는 과정을 가져온 코드
    override fun onGetPickedCategoryListSuccess(response: CategoryListResponse) {
        dismissLoadingDialog()
        binding.pickedCatTab.removeAllTabs() //기존의 모든 탭을 지우고

        for (e in response.result) { //탭 아이템 추가
            binding.pickedCatTab.addTab(binding.pickedCatTab.newTab().setText(e.categoryName))
        }

        //탭 클릭 리스너
        binding.pickedCatTab.addOnTabSelectedListener(object : TabLayout.OnTabSelectedListener{
            override fun onTabSelected(tab: TabLayout.Tab?) {

                //선택한 탭 아이템을 받아오는 부분
                clickedCatName = binding.pickedCatTab.getTabAt(binding.pickedCatTab.selectedTabPosition)

            }

            override fun onTabUnselected(tab: TabLayout.Tab?) {

            }

            override fun onTabReselected(tab: TabLayout.Tab?) {

            }
        })
    }
반응형