只有在2次旋转后,viewpager中的碎片才会消失

时间:2014-09-30 22:32:24

标签: android android-fragments android-viewpager

我在查看程序中遇到了碎片的奇怪问题。如果我旋转设备一次,一切似乎都能正常工作,我的碎片会加载所有数据。然而,在第二次旋转时,我的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)时,我不完全确定该预期行为是否存在。根据我的理解,在父片段上设置它也应该处理它的子片段。但是,每次轮换还是需要重新创建子片段的视图吗?

0 个答案:

没有答案