How to use TabLayout with ViewPager2 in Android

前端 未结 7 1760
春和景丽
春和景丽 2020-12-29 18:24

I want to use com.google.android.material.tabs.TabLayout component with Android\'s new ViewPager implementation androidx.viewpager2.widget.Vi

7条回答
  •  灰色年华
    2020-12-29 18:54

    If your tab title comes from string.xml.
    You can put the fragment with title together in a List then set title by TabLayoutMediator. It helps you easily to reorder, delete or add new fragment

    class MyFragment : Fragment() {
    
        override fun onCreateView(...): View? {
            ...
    
            TabLayoutMediator(tabLayout, viewPager) { tab, position ->
                tab.text = pagerAdapter.getTabTitle(position)
            }.attach()
        }
    
        private inner class PagerAdapter(fa: FragmentActivity) : FragmentStateAdapter(fa) {
            val pages = listOf(
                Pair(HomeFragment.newInstance(), R.string.home),
                Pair(GraphFragment.newInstance(), R.string.graph),
                Pair(SettingFragment.newInstance(), R.string.setting),
            )
    
            override fun createFragment(position: Int): Fragment {
                return pages[position].first
            }
    
            override fun getItemCount(): Int {
                return pages.count()
            }
    
            fun getTabTitle(position: Int): String {
                return getString(pages[position].second)
            }
        }
    }
    

提交回复
热议问题