Fragment放ViewPager,ViewPager里面是fragment。第一次进入没问题,再次进入ViewPager的fragment时里面内容就没了,数据丢失。
private void InitViewPager(View parentView) {
mPager = (ViewPager) parentView.findViewById(R.id.vPager);
fragmentsList = new ArrayList<Fragment>();
fragment1 = new SortHotFragment();
fragment2 = new SortNewFragment();
fragmentsList.add(fragment1);
fragmentsList.add(fragment2);
mPager.setAdapter(new MyFragmentPagerAdapter(getActivity().getSupportFragmentManager(), fragmentsList));
mPager.setCurrentItem(0);
mPager.setOnPageChangeListener(new MyOnPageChangeListener());
}
一般根据往常的经验,如果要传入fragmentmanager,就是getActivity().getSupportFragmentManager()
但是,这样会导致一个问题:数据丢失。
在fragment切换来回时,其他单个的fragment里面的数据不会丢失,而使用了viewpager的多个fragment切换的fragment会一团漆黑。
解决办法:
将getActivity().getSupportFragmentManager()
部分,用getChildFragmentManager()
替换。
mPager.setAdapter(new MyFragmentPagerAdapter(getActivity().getChildFragmentManager(), fragmentsList));
mPager.setCurrentItem(0);
mPager.setOnPageChangeListener(new MyOnPageChangeListener());
这是因为
getFragmentManager到的是activity对所包含fragment的Manager,而如果是fragment嵌套fragment,那么就需要利用getChildFragmentManager()了。
在使用fragment时 遇到
getFragmentManager()和getChildFragmentManager()的使用,
getFragmentManager()是所在fragment 父容器的碎片管理,
getChildFragmentManager()是在fragment 里面子容器的碎片管理。
getFragmentManager到的是activity对所包含fragment的Manager,而如果是fragment嵌套fragment,那么就需要利用getChildFragmentManager()了。