当前位置:首页 > 英文周记 > 正文内容

fragment生命周期「fragment生命周期方法」

更新时间:2026-07-19 07:18:56 周记网3年前 (2023-02-28)英文周记129

Fragment与Activity生命周期关系

1. 为什么要引入Fragment?

fragment生命周期「fragment生命周期方法」

  引入Fragment是出于大屏幕的平板电脑的需要,使用Fragment可以在同一个activity中显示两个或多个Fragment,这些Fragment都属于一个Activity。Fragment必须被“嵌入”到activity中使用,因此Fragment虽然有自己的生命周期,但它的生命周期会受到所在的Activity的限制。

2. Activity与Fragment生命周期的关系?

Activity的OnCreate()

|

Fragment的onAttach(Activityactivity),其中Activity就是它所依附的Activity

|

Fragment的onCreate()

|

Fragment的onCreateView(LayoutInflaterinflater, ViewGroup container, BundlesavedInstanceState)

|

Fragment的onActivityCreated()

|

Activity的onResume()

|

Fragment的onResume()

|

Fragment的onPause()

|

Activity的onPause()

|

Fragment的onDestroy()

|

Fragment的onDetach()

|

Activity的onDestroy()

3. 在Activity如何中使用Fragment?

直接在Activity的layout布局文件中定义:

res/layout/activity_main.xml

4. Fragment如何向Activity传递数据?

  一般是先在Fragment中定义一个接口,用于回调。然后让他所在的Activity实现这个接口。举个例子:

MainActivity.java

5. 那么这个叫FragmentDemos的framgent如何去获取参数呢?

是在onCreate()中使用getArguments()获取bundle参数。

FragmentDemos.java

Fragment生命周期

首先调用Activity的onCreate和onStart,然后Fragment会连续的从onAttach到onStart,然后调用Activity的onResume,最后是Fragment的onResume。

** 值得注意的是Fragment的onSart方法可能是在Fragment的onSart方法之前被调用,而且Fragment从onAttach到onStart是一个连续的执行。

add一个Fragment的时候不管之前是否有其他的Fragment,其他的Fragment是以什么方式加进去的,都会从onAttach方法开始走到onResume

onAttach -- onCreate -- onCreateView -- onActivityCreated --  onStart -- onResume

如果之前没有Fragment 直接Replace 相当于Add

onAttach -- onCreate -- onCreateView -- onActivityCreated --  onStart -- onResume

如果之前有一个Fragment  A ,然后现在要 B replace A

B: onAttach -- onCreate   

A: onPause -- onStop --  onDestroyView -- onDestory -- onDetach  (onDestory、onDetach取决于A是否有添加到回退栈)

B: onCreateView -- onActivityCreated --  onStart -- onResume

当remove一个fragment的时候,它的生命周期跟是否添加到回退栈( addToBackStack )有关系。如果Fragment被添加到回退栈中的话,销毁时只会销毁View,生命周期走到onDestroyView,不会把整个Fragment销毁,跟Activity断开关联

onPause -- onStop --  onDestroyView -- onDestory -- onDetach  (onDestory、onDetach取决于A是否有添加到回退栈)

通过 hide() 、 show() 来隐藏、显示Fragment,此时 Fragment 只改变了可见性,并不涉及生命周期的改变

commit、commitNow、commitAllowingStateLoss、commitNowAllowingStateLoss

commit 是异步操作,会将任务提交给主线程,

commitNow 会立即执行事务

commitAllowingStateLoss 和 commit的区别就是:commit如果在onSaveInstanceState之后提交会抛出IllegalStateException(无效状态异常)

状态的丢掉,指的是可能丢掉FragmentManager状态, 即onSaveInstanceState之后任何被添加或被移除的Fragments.

Fragment在生命周期中是如何走到onCreateView的

Fragment在生命周期中是如何走到onCreateView的

Fragment的生命周期初探: 因为Fragment必须嵌入在Acitivity中使用,所以Fragment的生命周期和它所在的Activity是密切相关的。 如果Activity是暂停状态,其中所有的Fragment都是暂停状态;如果Activity是stopped状态

简单描述一下 fragment 的生命周期函数都有哪些

fragment的特点:

fragment总是作为Activity界面的组成部分。fragment可以钓鱼getActivity()方法获取它所在的Activity,Activity可以调用FragmentManager的findFragmentById()或者findFragmentByTag()方法来获取Fragment。

在Activity运行过程中,可以调用FragmentManager的add()、remove()、replace()方法动态的添加、删除或者替换Fragment。

一个Activity可以同时组合多个Fragment;反过来一个Fragment也可被多个Activity复用。

Fragment可以响应自己的输入事件,并拥有自己的生命周期,但它们的生命周期直接被其所属的Activity的生命周期控制。

2

官方介绍原图

3

最简单的创建一个Fragment只需要实现三个方法:

onCreate(): 系统创建Fragment对象后回调该方法,实现代码只初始化想要在Fragment中保持的必要控件,当Fragment被暂停或者停止后可恢复。

onCreateView(): 当Fragment绘制界面组件时会回调该方法。该方法必须返回一个View,该View也就是该Fragment所显示的View。

onPause(): 当用户离开该Fragment时将会回调该方法。

4

生命周期全程介绍图

5

在工作中长需要把 一个Activity 改成 fragment

从Activity到Fragment最大的变动在于,在Fragment里面的onCreate()函数内,是没有办法使用findViewById、setContentView这些函数的。因为Fragment本身并没有提供这些方法。于是我们只能通过onCreateView和onViewCreated来实现对显示的控制。

6

而一些Fragment没有提供的属于Activity的函数我们可以通过getActivity()得到作为parent的Activity来调用,因为Fragment只是作为片段提供给Activity使用的,所以很多功能的实现都被留在了Activity里面。

原先this的地方改为 getActivity()

content的地方 改为 getActivity().getApplicationContext()

这样修改Activity成 fragment 一般不会有问题。

有可能的页面比较复杂,自己对着生命周期看看相互间有什么方法可以替代或者自己写。

我问你答-简述 Fragment 生命周期

如上图所示,中间部分从上到下为 Fragment 这个生命周期的方法调用。左边对比参照的是 Activity 的生命周期,右边对比参照的是 Fragment 中 View 的生命周期(或者叫有效范围)

另外关于 Fragment 的状态保存方法有:

这两个的用法和 Activity 的状态保存类似。要注意的是 onSaveInstanceState() 方法在 API 28 之前会在 onStop() 之前触发,在 API 28 及之后会在 onStop() 之后触发。

activity和fragment的生命周期状态各有哪些?状态之间如何变换

Fragment的生命周期初探:

因为Fragment必须嵌入在Acitivity中使用,所以Fragment的生命周期和它所在的Activity是密切相关的。

如果Activity是暂停状态,其中所有的Fragment都是暂停状态;如果Activity是stopped状态,这个Activity中所有的Fragment都不能被启动;如果Activity被销毁,那么它其中的所有Fragment都会被销毁。

但是,当Activity在活动状态,可以独立控制Fragment的状态,比如加上或者移除Fragment。

当这样进行fragment transaction(转换)的时候,可以把fragment放入Activity的back stack中,这样用户就可以进行返回操作。

使用Fragment时,需要继承Fragment或者Fragment的子类(DialogFragment, ListFragment, PreferenceFragment, WebViewFragment),所以Fragment的代码看起来和Activity的类似。

每当创建一个Fragment时,首先添加以下三个回调方法:

onCreate():系统在创建Fragment的时候调用这个方法,这里应该初始化相关的组件,一些即便是被暂停或者被停止时依然需要保留的东西。 onCreateView():当第一次绘制Fragment的UI时系统调用这个方法,该方法将返回一个View,如果Fragment不提供UI也可以返回null。注意,如果继承自ListFragment,onCreateView()默认的实现会返回一个ListView,所以不用自己实现。 onPause():当用户离开Fragment时第一个调用这个方法,需要提交一些变化,因为用户很可能不再返回来。

将Fragment加载到Activity当中有两种方式:

方式一:添加Fragment到Activity的布局文件当中 方式二:在Activity的代码中动态添加Fragment(荐)

第一种方式虽然简单但灵活性不够。添加Fragment到Activity的布局文件当中,就等同于将Fragment及其视图与activity的视图绑定在一起,且在activity的生命周期过程中,无法切换fragment视图。

第二种方式比较复杂,但也是唯一一种可以在运行时控制fragment的方式(加载、移除、替换)。

发表评论

访客

◎欢迎参与讨论,请在这里发表您的看法和观点。