Make ViewPager call Fragement’s Lifecycle methods
Description:
The ViewPager component which was introduced in support
library has lot of issues. The Fragments which are used on the ViewPager does
not call its lifecycle methods like onResume, onPause, by which it is
impossible for updating the fragments.
Root Cause:
If you check the source code of ViewPager, the view pager
only have the swiping algorithm. The PagerAdapter which is an abstract class is
implemented by the FragmentPagerAdapter. This adapter is like the controller.
So the issue is not with these two, the actual issue is with the container
which holds the entire fragment. The container which the ViewPager uses is none
other than FragmentManager. FragmentManager uses a transaction manager like
sqlite to maintain the addition or deletion and that is the FragmentTransaction.
Whenever a Viewpager is set with the PageAdapter which contains the fragment,
it adds all the Fragments to the container (FragmentManager) using the
FragmentTransaction. Therefore it calls the onCreateView,onResume and onPause
of all the fragment in one go. This is done for lazy-loading of the fragments
to get the smoothness while swiping the fragments.
Overcome this issue:
Google guys have to come with a container for view pager
rather than using the FragmentManager and FragmentTransaction. Certainly with
this current transaction manager it is not achievable. I have also checked the
source code of ViewPager for Android Lollipop and still this issue is not
resolved.
Work around:
I have come up with a workaround and customized these api of
android sdk.
1)
ViewPager
2)
PagerAdapter
3)
FragmentPagerAdapter
I have created a jar and can be downloaded here. As of now
the onResume,onPause of all the fragments in the viewpager will be called as
per the flow.