我在查看程序中遇到了碎片的奇怪问题。如果我旋转设备一次,一切似乎都能正常工作,我的碎片会加载所有数据。然而,在第二次旋转时,我的viewpager中的碎片似乎消失了。如果我检查isAdded(),它返回true,但isVisible()返回false。是否有原因可以将片段添加到我的viewpager中,但是不可见?
这是我的片段,其中包含viewpager:
public class DrawerFragment extends ParentFragment{
ViewPager viewPager;
GradingFragmentPagerAdapter pagerAdapter;
ArrayList<ParentFragment> mGradingFragments;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setRetainInstance(true);
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
viewPager = (android.support.v4.view.ViewPager) rootView.findViewById(R.id.pager);
if(mFragments == null){
mFragments = new ArrayList<ParentFragment>();
mFragments.add(new FragmentA());
mFragments.add(new FragmentB());
}
pagerAdapter = new MyFragmentPager(getChildFragmentManager(), mFragments);
viewPager.setAdapter(pagerAdapter);
return rootView;
}
}
这是我的PagerAdapter类
public class MyFragmentPagerAdapter extends FragmentPagerAdapter {
ArrayList<ParentFragment > fragments;
public GradingFragmentPagerAdapter(android.support.v4.app.FragmentManager fm, ArrayList<ParentFragment> fragments){
super(fm);
this.fragments = fragments;
}
@Override
public ParentFragment getItem(int position) {
return fragments.get(position);
}
@Override
public int getCount() {
return fragments.size();
}
}
我不明白的是,它似乎只是在第二次轮换中突破。如果我在viewpager上设置背景颜色,在2次旋转后,我的片段所在的区域是viewpagers背景颜色。但是,如果我在调试模式下查看它,片段会被添加到pagerAdapter。他们只是不可见。
此外,看起来onCreateView在viewpager中的2个片段上被调用似乎没有。在使用setRetainInstance(true)时,我不完全确定该预期行为是否存在。根据我的理解,在父片段上设置它也应该处理它的子片段。但是,每次轮换还是需要重新创建子片段的视图吗?