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? And how can i fix it?
EDIT
There is my Adapter
for ViewPager
public class MainLiveTVtAdapter extends FragmentStatePagerAdapter {
private List<Fragment> fragments;
private String[] title = {"Sự kiện", "Kênh","Yêu thích"};
FragmentManager fm;
public MainLiveTVtAdapter(FragmentManager fm, List<Fragment> fragments) {
super(fm);
this.fm=fm;
this.fragments = fragments;
}
@Override
public Fragment getItem(int position) {
return this.fragments.get(position);
}
@Override
public int getItemPosition(Object object) {
return POSITION_NONE;
}
@Override
public int getCount() {
return this.fragments.size();
}
@Override
public CharSequence getPageTitle(int position) {
return title[position];
}
// @Override
// public void destroyItem(ViewGroup container, int position, Object object) {
// if (position >= getCount()) fm.beginTransaction().remove((Fragment) object).commit();
// }
}