【发布时间】:2015-08-13 01:09:08
【问题描述】:
在状态丢失或屏幕旋转时,当我的布尔标志为真时,我想重新创建我的屏幕。但是,片段管理器仍然附加了之前的片段并被加载。
我能做些什么来摆脱那个碎片?
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);
【问题讨论】:
-
为什么需要明确删除片段?您可以只准备数据并刷新内容。
-
当我没有数据时,我需要删除旧片段。我试图在操作后重新实例化片段以获取更新的数据。否则访问空对象会崩溃。
-
只需要检查fragment,避免在获取更新数据后崩溃,activity会处理fragment的生命周期,你只需要确保fragment在即将显示时获取到最新的数据(例如在 onCreateView())
标签: android android-fragments android-viewpager fragmentmanager