我問了一個關於片段初始化的問題,併發布了我的代碼(Delay initialization when using Fragment in Android)。問題解決了。但是我的問題依然存在。當我撥打onLoad()
來獲得變量時,它會拋出NullPointerException
。我在onCreateView()
中初始化這些變量。所以我猜生命週期結束了。我在這些函數中加入了A.java中的信息:onDestroy
,onDestroyView
,onStop
。 onDestroyView
和onStop
被調用,而onDestroy
不是當片段A更改爲另一個時。奇怪:Android中片段的生命週期
片段A中有一個EditText。我輸入一個字符串abc
。 1,如果生命週期結束,那麼當我將片段從A更改爲另一個,然後再更改回A時,輸入應爲空。但它不是。 2,如果生命週期不結束,爲什麼我不能得到變量?
那麼有什麼可以保存abc
的地方?那是什麼?哪裏?
看來我不能在片段中延遲初始化。我無法獲得非靜態變量。
Code:
/** super class of Fragment */
public class BaseFragment extends Fragment {
public void onLoad(Context context){
}
}
/** */
public class AFragment extends BaseFragment{
TextView name;
@Override
public View onCreateVew(...){
name = new TextView(..);
}
@Override
public void onLoad(Context context){
// here will throw NullPointerException
name.setText("=========");
}
}
public class TabsAdapter extends FragmentPagerAdapter implements TabHost.OnTabChangeListener,ViewPager.OnPageChangeListener {
....
@Override
public Fragment getItem(int position) {
TabInfo info = mTabs.get(position);
return Fragment.instantiate(mContext, info.mClss.getName(), info.mArgs);
}
@Override
public void onPageSelected(int position) {
TabWidget widget = mTabHost.getTabWidget();
int oldFocusability = widget.getDescendantFocusability();
widget.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
mTabHost.setCurrentTab(position);
widget.setDescendantFocusability(oldFocusability);
BaseFragment f = (BaseFragment) getItem(position);
f.onLoad(mContext);
}
}
你可以發佈堆棧跟蹤哪裏得到'NullPointerException'以及代碼? – antew
@antew完成!你可以檢查它。 – blackdog