关于Fragment.onCreate()中引用Activity.onCreate()创建的对象时的一个异常
2016-05-26 01:22
477 查看
如果在Fragment.onCreate()中引用Activity.onCreate()创建的对象,可能会抛空指针异常,这是因为Fragment.onCreate()可能会在Activity.onCreate()没执行完时就执行了,一般出现在Activity销毁再重建的情况下,这个时候可以把Fragment.onCreate()中的引用搬到Fragment.onActivityCreated()中。
FragmentActivity中onCreate()执行到最后会调用mFragments.dispatchCreate(),该方法实际上会调到FragmentManager.moveToState(),从而调到Fragment.performCreate(),这个方法中就会直接调Fragment.onCreate()。
FragmentActivity中onCreate()执行到最后会调用mFragments.dispatchCreate(),该方法实际上会调到FragmentManager.moveToState(),从而调到Fragment.performCreate(),这个方法中就会直接调Fragment.onCreate()。
@SuppressWarnings("deprecation") @Override protected void onCreate(@Nullable Bundle savedInstanceState) { mFragments.attachHost(null /*parent*/); super.onCreate(savedInstanceState); NonConfigurationInstances nc = (NonConfigurationInstances) getLastNonConfigurationInstance(); if (nc != null) { mFragments.restoreLoaderNonConfig(nc.loaders); } if (savedInstanceState != null) { Parcelable p = savedInstanceState.getParcelable(FRAGMENTS_TAG); mFragments.restoreAllState(p, nc != null ? nc.fragments : null); } mFragments.dispatchCreate(); }
public void dispatchCreate() { mStateSaved = false; moveToState(Fragment.CREATED, false); }
void moveToState(Fragment f, int newState, int transit, int transitionStyle, boolean keepActive) { ... if (!f.mRetaining) { f.performCreate(f.mSavedFragmentState); } ... }
void performCreate(Bundle savedInstanceState) { ... onCreate(savedInstanceState); // fragment中的onCreate() ... }
相关文章推荐
- hdu 3874 线段树 离线查询
- Java序列化与反序列化
- LeetCode 147. Insertion Sort List(插入有序链表)
- HDOJ/HDU 1073 Online Judge(字符串处理~)
- HDOJ/HDU 1073 Online Judge(字符串处理~)
- hdu 2852 线段树 单点更新
- Android N画中画模式
- LeetCode 148. Sort List(链表排序)
- win8.1安装软件报错-2503和2502
- iOS多线程编程及GCD简介
- 量化分析:把Tushare数据源,规整成PyalgoTrade所需格式
- php array_filter过滤数组为空值
- Hibernate错误
- C语言中访问结构体成员时 点 . 和 箭头 -> 的区别
- Leetcode no. 257
- POJ 1008 (模拟)
- IntentFilter过滤规则
- Navicat
- Linux 网络 I/O 模型简介(图文)
- LeetCode 149. Max Points on a Line(直线上的点)