Home > Net >  View Pagger loads two child data at same time
View Pagger loads two child data at same time

Time:09-22

I Use a Activity that holds a Fragment Inside That Fragment I have an other Fragment that holds ViewPagger2 now when apps open its should display first child of ViewPagger2 and also lode only that data but its not happening its loads two childs that make my app slow how to solve this issue.

CodePudding user response:

Put your data loading in the Fragment's onResume method as Viewpager2 only resumes the Fragment when it is displayed.

This maintains the Fragment's encapsulation but achieves the same goal as doing it in a OnPageChangeCallback.

CodePudding user response:

It's the default behaviour of the viewPager2 to load adjacent pages for smoother animation. But you can override the default offscreen page limit by using viewpager2 setOffscreenPageLimit method.

In kotlin use

viewPager2.offscreenPageLimit = PAGE_COUNT

This will load that specified number of pages in advance. But, this PAGE_COUNT cannot be less than 1 which means, It'll still load your second fragment. But, It shouldn't slow down your app as you've mentioned.

If you are doing any network request then you can set registerOnPageChangeCallback for viewPager2 and override onPageSelected, then do the network request only when that fragment is selected.

As onPageSelected(position: Int) only gives us the position of the selected page, but not the fragment itself, so we have to retrieve the selected fragment using childFragmentManager and then trigger our network load request.

viewPager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
            override fun onPageSelected(position: Int) {
                super.onPageSelected(position)
                if (childFragmentManager.fragments.size > position) {
                    if(position == 1) { // for second fragment
                        val fragment = childFragmentManager.fragments[position] as SecondFragmentClassName
                        fragment.loadNetworkData()
                    }
                }
            }
        })

For multiple fragments you can use when statement accordingly.

  • Related