Fragment的生命周期和遇到的坑

2019-05-23  本文已影响0人  周蛋蛋

Fragment每个生命周期方法的意义、作用(注意红色的不是生命周期方法):

setUserVisibleHint():设置Fragment可见或者不可见时会调用此方法。在该方法里面可以通过调用getUserVisibleHint()获得Fragment的状态是可见还是不可见的,如果可见则进行懒加载操作。

onAttach():执行该方法时,Fragment与Activity已经完成绑定,该方法有一个Activity类型的参数,代表绑定的Activity,这时候你可以执行诸如mActivity = activity的操作。
onCreate():初始化Fragment。可通过参数savedInstanceState获取之前保存的值。
onCreateView():初始化Fragment的布局。加载布局和findViewById的操作通常在此函数内完成,但是不建议执行耗时的操作,比如读取数据库数据列表。
onActivityCreated():执行该方法时,与Fragment绑定的Activity的onCreate方法已经执行完成并返回,在该方法内可以进行与Activity交互的UI操作,所以在该方法之前Activity的onCreate方法并未执行完成,如果提前进行交互操作,会引发空指针异常。
onStart():执行该方法时,Fragment由不可见变为可见状态。
onResume():执行该方法时,Fragment处于活动状态,用户可与之交互。
onPause():执行该方法时,Fragment处于暂停状态,但依然可见,用户不能与之交互。

onSaveInstanceState():保存当前Fragment的状态。该方法会自动保存Fragment的状态,比如EditText键入的文本,即使Fragment被回收又重新创建,一样能恢复EditText之前键入的文本。

onStop():执行该方法时,Fragment完全不可见。
onDestroyView():销毁与Fragment有关的视图,但未与Activity解除绑定,依然可以通过onCreateView方法重新创建视图。通常在ViewPager+Fragment的方式下会调用此方法。
onDestroy():销毁Fragment。通常按Back键退出或者Fragment被回收时调用此方法。
onDetach():解除与Activity的绑定。在onDestroy方法之后调用。

Fragment生命周期执行流程(注意红色的不是生命周期方法):

官方生命周期图

生命周期.png
今天遇到的一个问题,两个小时浪费了
 @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        this.context = BaseApplication.mContext;
    }
 @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        View view = LayoutInflater.from(context).inflate(onCreateView(), container, false);
        initView(view);
        return view;
    }

在BaseFragment里面这样写了,这个context是全局的,结果造成的问题就是

Binary XML file line #11: Binary XML file line #11: Error inflating class android.support.design.widget.AppBarLayout

然后一直找XMl的问题,就是找不见,然后仔细看了代码,发现不知道从哪里粘贴的傻逼代码,没有仔细看,我就怀疑可能和这个问题有关,

 @Override
    public void onAttach(Context context) {
        super.onAttach(context);
        this.context = context;

    }

这样写就好了,哎

上一篇下一篇

猜你喜欢

热点阅读