我有一个Activity
,它有ViewPager
。这ViewPager
使用. Fragments
_ Adapter
我的每个片段都被视为部分(根据应用功能)。最初我使用一次加载所有ViewPager
项目,
viewPager.setOffscreenPageLimit(sectionList.size()); //sectionList is nothing but number of framgents
在片段中,我有一个在创建片段时setup
从Adapter
类调用的函数。
调查片段
public void setup(SectionView sectionView, int pos) {
this.sectionView = sectionView;
this.pos = pos;
}
调查适配器
@Override
public Fragment getItem(int pos) {
InvestigationFragment investigationFragment = new InvestigationFragment();
investigationFragment.setup(sectionViewHashMap.get(keys.get(pos)), pos);
fragments.add(investigationFragment);
return investigationFragment;
}
这里SectionView
是一个由 class 扩展的抽象类SimpleSection
。并在其中SimpleSection
添加自定义视图。自定义视图大约有 20-30 个视图类。
public abstract class SectionView {
public Section mSection;
public Context mContext;
public LinkedHashMap<Integer, SectionView> subSectionViews;
public LinkedHashMap<Integer, FieldWidget> fieldWidget;
public int actionSaveId;
protected LinearLayout sectionView;
protected Toolbar toolbar;
public final void initialiseSection(Toolbar toolbar) {
this.toolbar = toolbar;
createFields();
createSubSection();
}
public final void buildSection(LinearLayout v) {
sectionView = v;
addFields();
addSubSection();
}
protected abstract void createFields();
protected abstract void createSubSection();
protected abstract void addFields();
protected abstract void addSubSection();
public abstract boolean hasSubSection();
public abstract boolean validateSection();
protected abstract boolean persistSection();
public final boolean saveSection() {
boolean isSaved = true;
if (!validateSection()) {
isSaved = false;
} else if (!persistSection()) {
isSaved = false;
}
return isSaved;
}
}
到这里为止一切都很好。但是在某些我无法保留它的情况下,SectionView 会变为空。这是场景,
我有自定义相机实现,从片段我打开我的自定义相机(不破坏片段或活动),捕获图像,然后我回到片段
onCreateView()
有时被调用,所以sectionView
是空的。当我调试时,没有调用任何生命周期方法(例如onDestroyView()
,onDestroy()
,onDetach()
,onLowMemeory()
,onConfigurationChanged()
)。那怎么onCreateView()
叫呢?在 Nexus 9 中,在更改运行时权限时发生了同样的情况。我将进入
Fragment
,向下滚动状态栏 > 转到设置 > 应用程序 > 应用程序权限 > 位置 > 撤销位置权限。如果我授予权限,它不会崩溃,但如果我撤销 sectionView 对象将为空
奇怪的行为:为了检查第二种情况,我连接了调试器以确保在撤销Location
权限时片段/活动是否被破坏。一旦我撤销了位置权限,调试器就会断开连接并且应用程序被杀死/死亡。每当我撤销任何权限时都会发生这种情况。
现在如何确保sectionView
对象被保留或不被销毁?