0
我有一個有7頁的ViewPager,在導航時我保留了其中的4個,並在被另外4個設置替換後被銷燬,然後GC被銷燬。在ViewPager下銷燬的碎片會發生什麼?
gPager.get().setOffscreenPageLimit(4);
裏面我的自定義FragmentStatePagerAdapter
@Override public Parcelable saveState() { return null; }
我的問題是我得到空指針錯誤,即使我手動重新初始化片段中的觀點也被破壞,如「mDrawerLayout」和mDrawerList
後。示例:
View rootView = inflater.inflate(R.layout.drawer_layout_fragment, container, false);
mDrawerLayout = (DrawerLayout) rootView.get().findViewById(R.id.drawer_layout);
mDrawerList = (ListView) rootView.get().findViewById(R.id.left_drawer);
如果其他碎片被破壞,並且某些碎片正在ViewPager的頁面上顯示在屏幕上。這些片段是否再次被重新創建或者只是被保留,即使它經歷了onDestory
?如果Frag2
被銷燬並且Frag1
不是。 viewPager(位於主活動)將 再次調用setAdapter
?或者它會自動跳過setAdapter
並直接轉到MyCustomPagerAdapter
來填充被破壞的碎片?
@Override
public Fragment getItem(int arg0) {
SavePref saveState = new SavePref(mContext.get());
switch(arg0){
/** Android tab is selected */
case 0:
Frag f1 = new Frag1()
return f1;
case 1:
Frag f2 = new Frag2()
return f2;
}
}
所有'setOffscreenPageLimit(4)的第一個'裝置4在任當前選定片段的一側將保存在內存中。因此,您可能會將8個片段保存在內存中,但不包括當前顯示的片段。其次讓'FragmentStatePagerAdapter'保存狀態,不要覆蓋'saveState()'。 –
@ M-WaJeEh我正在使用覆蓋'saveState',因爲我沒有,也不會使用'onConfig Changes',因此當有'orientation change'不會觸發空指針時,我可以保留片段狀態。即使不改變方向,這是否會影響導航? – rahstame
我不明白你的意思。此方法用於'FragmentStatePagerAdapter'。你不想讓'FragmentStatePagerAdapter'來保存你的片段的狀態嗎? –