What is the difference between FragmentPagerAdapter and FragmentStatePagerAdapter?

后端 未结 7 2143
傲寒
傲寒 2020-11-22 12:31

What is the difference between FragmentPagerAdapter and FragmentStatePagerAdapter?

About FragmentPagerAdapter Google\'s guide

7条回答
  •  挽巷
    挽巷 (楼主)
    2020-11-22 13:02

    Here is a log lifecycle of each fragment in ViewPager which have 4 fragment and offscreenPageLimit = 1 (default value)

    FragmentStatePagerAdapter

    Go to Fragment1 (launch activity)

    Fragment1: onCreateView
    Fragment1: onStart
    Fragment2: onCreateView
    Fragment2: onStart
    

    Go to Fragment2

    Fragment3: onCreateView
    Fragment3: onStart
    

    Go to Fragment3

    Fragment1: onStop
    Fragment1: onDestroyView
    Fragment1: onDestroy
    Fragment1: onDetach
    Fragment4: onCreateView
    Fragment4: onStart
    

    Go to Fragment4

    Fragment2: onStop
    Fragment2: onDestroyView
    Fragment2: onDestroy
    

    FragmentPagerAdapter

    Go to Fragment1 (launch activity)

    Fragment1: onCreateView
    Fragment1: onStart
    Fragment2: onCreateView
    Fragment2: onStart
    

    Go to Fragment2

    Fragment3: onCreateView
    Fragment3: onStart
    

    Go to Fragment3

    Fragment1: onStop
    Fragment1: onDestroyView
    Fragment4: onCreateView
    Fragment4: onStart
    

    Go to Fragment4

    Fragment2: onStop
    Fragment2: onDestroyView
    

    Conclusion: FragmentStatePagerAdapter call onDestroy when the Fragment is overcome offscreenPageLimit while FragmentPagerAdapter not.

    Note: I think we should use FragmentStatePagerAdapter for a ViewPager which have a lot of page because it will good for performance.

    Example of offscreenPageLimit:

    If we go to Fragment3, it will detroy Fragment1 (or Fragment5 if have) because offscreenPageLimit = 1. If we set offscreenPageLimit > 1 it will not destroy.
    If in this example, we set offscreenPageLimit=4, there is no different between using FragmentStatePagerAdapter or FragmentPagerAdapter because Fragment never call onDestroyView and onDestroy when we change tab

    Github demo here

提交回复
热议问题