Reputation: 21
I'm having a vertical viewpager inside a horizontal viewpager. In the second fragment of horzontal viewpager I, adding the vertical viewpager. The vertical viewpager contains fragments with images, so when the fragments are visible to user I've to start animate the image, for that used setUserVisibleHint. But when moved to second fragment of horizontal viewpager the setUserVisibleHint of fragment inside vertical viewpager is not called. I've tried all the methods, oncreate,oncreateview..but nothing works for me. I'm stuck here, please help me in this
Upvotes: 2
Views: 582
Reputation: 41
Old question, but I hit this and thought I might help someone like me in future. The problem occurs when you have an outer viewpager containing (outer)fragments that themselves contain an inner viewpager of (inner)fragments. When you move between outer fragments the setUserVisibleHint for the current fragment showing in the inner viewpager is not called. I am using a FragmentStatePagerAdaptor to control my viewpagers.
A fix for this is to subclass FragmentStatePagerAdaptor to expose the primary fragment and provide a setUserVisibleHint method:
public class CustomPagerAdaptor extends FragmentStatePagerAdaptor {
private Fragment primary;
@Override
public void setPrimaryItem(ViewGroup container, int position, Object object) {
super.setPrimaryItem(container, position, object);
primary = (Fragment)object;
}
public void setUserVisibleHint(boolean isVisible) {
if (primary != null){
primary.setUserVisibleHint(isVisible);
}
}
}
Then in the outer fragment pass the setUserVisibleHint through:
@Override
public void setUserVisibleHint(boolean isVisible) {
super.setUserVisibleHint(isVisible);
if (mAdaptor != null) mAdaptor.setUserVisibleHint(isVisible);
}
Upvotes: 3