Android : Why does ViewPager preserve it's current page even new a instance have been created?

on Friday, March 27, 2015


My Context


Assume i have a Fragment contain a ViewPager which have 3 pages(fragment). My onCreateView method:



@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.main_tv_fragment, null);
listFragment = new ArrayList<>();
listFragment.add(new EventFragment());
listFragment.add(new ChannelFragment());
listFragment.add(new FavoriteFragment());
viewPager = (ViewPager) rootView.findViewById(R.id.viewpager);
fragmentPagerAdapter = new MainLiveTVtAdapter(
getChildFragmentManager(), listFragment);

slidingTabLayout = (SlidingTabLayout) rootView.findViewById(R.id.sliding_tabs);
// Center the tabs in the layout
slidingTabLayout.setDistributeEvenly(true);
slidingTabLayout.setCustomTabColorizer(null);
try {
viewPager.setAdapter(fragmentPagerAdapter);
} catch (Exception ex) {
ex.getMessage();
}
slidingTabLayout.setCustomTabColorizer(new SlidingTabLayout.TabColorizer() {
@Override
public int getIndicatorColor(int position) {
return getActivity().getResources().getColor(R.color.action_bar_bg);
}
});
slidingTabLayout.setViewPager(viewPager);
viewPager.setOffscreenPageLimit(5);
viewPager.setAdapter(fragmentPagerAdapter);
slidingTabLayout.setViewPager(viewPager);
viewPager.setCurrentItem(page, false);
return rootView;
}


I called viewPager.setCurrentItem(page, false); to set the current page of ViewPager, assume page = 1 mean the second page. When fragment is rendered in window, the second page is shown up, i scroll ViewPager to third page then replace this fragment by another one. After that i recreate this fragment and bring it on, but the ViewPager still shown the third page even viewPager.setCurrentItem(page, false); was called with page = 1.


As you can see above, ViewPager have been created new instance and the Adapter is also.


Can anyone explain why it happen?


0 comments:

Post a Comment