Мой контекстПочему ViewPager сохраняет текущую страницу, даже новый экземпляр был создан?
Предположим, у меня есть Fragment
содержат ViewPager
, которые имеют 3 страниц (фрагмент). Мой onCreateView метод:
@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;
}
Я назвал viewPager.setCurrentItem(page, false);
установить текущую страницу в ViewPager
, предположим, что page = 1
означает вторую страницу. Когда фрагмент отображается в окне, отображается вторая страница, я прокручиваю ViewPager
на третью страницу, а затем заменяю этот фрагмент на другой. После этого я воссоздаю этот фрагмент и принесу его, но ViewPager
все еще показывал третью страницу, даже viewPager.setCurrentItem(page, false);
был вызван с page = 1
.
Как вы можете видеть выше, ViewPager
был создан новый экземпляр, а также Adapter
.
Может ли кто-нибудь объяснить, почему это произошло? И как я могу это исправить?
EDIT
Существует мой Adapter
для 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();
// }
}
мочь добавить код для 'MainLiveTVtAdapter' – royB
@ mr.icetea Что вы подразумеваете под этим не сохраняет его состояние? – Hades
Отъезд: http://www.truiton.com/2013/05/android-fragmentstatepageradapter-example/ –