美文网首页
Android Fragment 生命周期

Android Fragment 生命周期

作者: Rimson | 来源:发表于2018-12-11 16:27 被阅读0次

    问题由来

    最近开始尝试使用Kotlin,体验如下



    这种直接调用控件id进行的操作,发现在Fragment中并不可以,会报错:

    Caused by: java.lang.IllegalStateException: xxx must not be null

    不能直接使用控件id的原因是,xml文件还没有载入。这就类似于在Activity中要在setContentView之后再使用findViewById。

    解决方法

    重写了Fragment的onViewCreated方法,在这个方法内部对控件进行操作。但是在Fragment的官方文档中却没有出现过这个方法,所以自己来捋一下Fragment的声明周期。

    Fragment的生命周期

    先放两张经典的图

    Fragment的生命周期:


    Fragment 生命周期

    Activity和Fragment生命周期对比:


    观察生命周期

    重写了图中所有方法以及onViewCreated方法,在方法内打印方法名

    切换到该Fragment

    2018-12-11 15:58:00.750 1683-1683/com.rimson.hellojetpack D/SecondFragment:: onAttach
    2018-12-11 15:58:00.750 1683-1683/com.rimson.hellojetpack D/SecondFragment:: onCreate
    2018-12-11 15:58:00.750 1683-1683/com.rimson.hellojetpack D/SecondFragment:: onCreateView
    2018-12-11 15:58:00.756 1683-1683/com.rimson.hellojetpack D/SecondFragment:: onViewCreated
    2018-12-11 15:58:00.757 1683-1683/com.rimson.hellojetpack D/SecondFragment:: onActivityCreated
    2018-12-11 15:58:00.757 1683-1683/com.rimson.hellojetpack D/SecondFragment:: onStart
    2018-12-11 15:58:00.758 1683-1683/com.rimson.hellojetpack D/SecondFragment:: onResume
    

    返回

    声明:此处用的是Jetpack的Navigation,直接按返回键返回至nav_host_fragment
    所以这个返回可以看做是销毁该Fragment

    2018-12-11 16:19:45.527 1683-1683/com.rimson.hellojetpack D/SecondFragment:: onPause
    2018-12-11 16:19:45.528 1683-1683/com.rimson.hellojetpack D/SecondFragment:: onStop
    2018-12-11 16:19:45.528 1683-1683/com.rimson.hellojetpack D/SecondFragment:: onDestroyView
    2018-12-11 16:19:46.006 1683-1683/com.rimson.hellojetpack D/SecondFragment:: onDestroy
    2018-12-11 16:19:46.007 1683-1683/com.rimson.hellojetpack D/SecondFragment:: onDetach
    

    熄屏(回到桌面)

    2018-12-11 16:21:31.700 1683-1683/com.rimson.hellojetpack D/SecondFragment:: onPause
    2018-12-11 16:21:31.738 1683-1683/com.rimson.hellojetpack D/SecondFragment:: onStop
    

    解锁(返回应用)

    2018-12-11 16:21:34.390 1683-1683/com.rimson.hellojetpack D/SecondFragment:: onStart
    2018-12-11 16:21:34.406 1683-1683/com.rimson.hellojetpack D/SecondFragment:: onResume
    

    总结

    • Fragment的生命周期比Activity多了一些,但总体对接的上。
    • onViewCreated在onCreateView之后调用,所以控件操作可以在这个方法内进行。

    相关文章

      网友评论

          本文标题:Android Fragment 生命周期

          本文链接:https://www.haomeiwen.com/subject/qbkehqtx.html