3

I've been learning about TabLayout and ViewPager2. I think it's pretty neat. Its exactly what I was looking for but when I went to applied it in my app I noticed something strange. In the PagerAdapter class I see multiple cases being selected. So if I select Tab2(position 1), I see in the log statements that case 1 and case 2 are both being executed. It almost feels like a switch() without any break statements.

Is that the intended behavior? I want it to "jump" to say Fragment 3 without passing over Fragment 2. I see there's viewpager.setCurrentItem() but don't see where to call it, or how to make it behave with createFragment().

EDIT

After looking into ViewPager more it seems that it is intended to create the fragments adjacent to the selected tab, which makes sense since by default set to allow swiping between fragments. Putting viewpager.setCurrentItem(tab.position, false) inside the tablayout.addOnTabSelectedListener() gives the desired behavior. Not sure if that's how its intended to be done or if the Adapter's createFragment() will have a problem with it.

private class MyPagerAdapter(fa: FragmentActivity) : FragmentStateAdapter(fa) {

    override fun createFragment(position: Int): Fragment {

        return when (position) {
            0 -> FragmentOne.newInstance("Fragment 1")
            1 -> FragmentTwo.newInstance("Fragment 2")
            2 -> FragmentThree.newInstance("Fragment 3")
            else ->FragmentOne.newInstance("Fragment 1, Default")
        }
    }
}
dbarnes
  • 439
  • 1
  • 3
  • 11

0 Answers0