FragmentManager在状态丢失后包含来自viewpager的片段

时间:2015-08-13 01:09:09

标签: android android-fragments android-viewpager fragmentmanager

在状态丢失或屏幕旋转时,当我的布尔标志为真时,我想重新创建我的屏幕。但是,片段管理器仍然附加了先前的片段并且它被加载。

我该怎样做才能摆脱那个片段?

public class ViewPagerAdapter extends FragmentPagerAdapter {

private String[] mData;

public ViewPagerAdapter(FragmentManager fm) {
    super(fm);
    mData= new String[0];
}

@Override
public Fragment getItem(int position) {
    Bundle bundle = new Bundle();
    bundle.putInt("key", position);

    Fragment fragment = new MyFragment();
    fragment.setArguments(bundle);

    return fragment;
}

@Override
public int getCount() {
    return mData.length;
}

@Override
public int getItemPosition(Object object) {
    return POSITION_NONE;
}

@Override
public CharSequence getPageTitle(int position) {
    return mData[position];
}

public void setData(String[] data) {
    mData= data;
}
}

Activity onCreate()

中的一段代码
mViewPagerAdapter = new ViewPagerAdapter(getFragmentManager());
mViewPagerAdapter.setData(data);
viewPager.setAdapter(mViewPagerAdapter);

1 个答案:

答案 0 :(得分:0)

您可以覆盖instantiateItem()来检测屏幕旋转,就像片段一样。

代码示例:

@Override
public boolean isViewFromObject(View view, Object o) {
    return o == view;
}

@Override
public Object instantiateItem(ViewGroup container, int position) {
   View view = getActivity().getLayoutInflater().inflate(R.layout.pager_item,
                    container, false);
   return view;
}

注意:屏幕旋转时会出现instantiateItem()。活动没有检测到。提示是类没有onCreateView(),就像片段类一样。