How to show the right fragment in ViewPager when the tab is selected programmatically?

Viewed 18

I have implemented ViewPager2 with TabLayout, but when I want to choose selected tab programmatically, only TabLayout gets updated and not ViewPager2. Here is my code:

class SettingsFragment : Fragment() {

    ...

    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
        super.onViewCreated(view, savedInstanceState)

        val tabLayout = binding.tabs
        val mViewPager = binding.pager
        mViewPager.adapter = SettingsPagerAdapter(requireActivity())

        TabLayoutMediator(tabLayout, mViewPager
        ) { tab, position ->
            when (position) {
                0 -> { tab.text = "First Tab" }
                1 -> { tab.text = "Second Tab" }
            }
        }.attach()

        //I tried these, but none of them seemed to work for me:
        //(only tabs changed)

        //mViewPager.currentItem = 1
        //tabLayout.selectTab(tabLayout.getTabAt(1));
        //tabLayout.getTabAt(1)?.select()
    }
}

And this is my adapter:

class SettingsPagerAdapter(fa: FragmentActivity?) : FragmentStateAdapter(fa!!) {
    private val mFragments: Array<Fragment> = arrayOf(
        SettingsFirstFragment(),
        SettingsSecondFragment()
    )

    override fun getItemCount(): Int {
        return mFragments.size
    }

    override fun createFragment(position: Int): Fragment {
        return mFragments[position]
    }
}

0 Answers
Related