在 Fragment 生命周期中,有哪些回调方法?

在 Fragment 生命周期中,有哪些回调方法?序言Fragment从Android v3.0版本开始引入的,随着界面布局的复杂化,处理起来也更加的复杂,引入Fragment可以把Activi

大家好,欢迎来到IT知识分享网。

序言

Fragment从Android v3.0版本开始引入的,随着界面布局的复杂化,处理起来也更加的复杂,引入Fragment可以把Activity拆分成多个部分。一个Activity可以同时组合多个Fragment,一个Fragment也可被多个Activity 复用。Fragment可以响应自己的输入事件,并拥有自己的生命周期,但它们的生命周期直接被其所属的Activity的生命周期控制。

在 Fragment 生命周期中,有哪些回调方法?

Fragment 的回调方法:

  在Fragment的生命周期中,有一下方法会被回调:

· onAttach():当Fragment被添加到Activity时被回调,只回调一次。   

· onCreate(Bundle savedStatus):创建Fragment时被回调,一次。   

· onCreateView(): 每次创建、绘制该Fragment的View组件时回调,Fragment将会显示该方法返回的View组件。   

· onActivityCreated():Fragment所在的Activity启动完成后回调。   

· onStart():每次启动或恢复Fragment时被回调。   

· onResume():每次启动或恢复Fragment时被回调,onStart()回调后就会回调此方法。   

· onPause():暂停时回调。   

· onStop():停止Fragment时回调。   

· onDestroyView():销毁Fragment的View组件时回调。   

· onDestroy():销毁Fragment时调用,一次。   

· onDetach():将Fragment从Activity中删除、被替换完成时回到该方法,在onDestroy()之后回调。

  根据以上方法被回调的时机,我们可以根据需要选择性的覆盖指定方法。从而实现相关需求。

Fragment的主要功能就是创建一个View,并且有一个生命周期来管理这个View的创建和销毁。Fragment的生命周期与Activity的生命周期类似,都会有一些回调方法,你所做的工作就是利用好这些生命周期方法,在恰当的方法中做恰当的工作。

Fragment生命周期函数与Activity生命周期函数很多名字都是一样的,对应的功能也类似,只不过在Created状态和Destroyed状态比Activity增加了一些方法。下面就说一下这几个增加的生命周期方法:

  • onAttach(): 当fragment与它所在的Activity关联起来的时候调用。
  • onCreatView(): 当需要创建一个与Fragment关联的View时候会调用,这个方法会返回一个View,这个View会被添加到Activity的View树中,如果你不想Fragment显示一个View就返回null。
  • onDestroyView(): 当与Fragment关联的那个View(在onCreatView()方法中创建的)与Fragment解除关联,从View树中移除的时候调用,在下次Fragment需要显示一个View的时候会重新调用onCreatView方法。
  • onDetach(): 当Fragment与之前onAttach()是关联起来的那个Activity解除关系的时候调用。

与Activity类似,Fragment可以停留(长时间存在)的三个状态:

  • Resumed: Fragment的运行状态,此时Fragment处于运行状态,并且可以与用户之间进行交互,类似Activity的Resumed状态。
  • Paused: 有其他Activity获取焦点,前台运行,Fragment所在的Activity失去焦点,部分的显示在前台Activity下面。
  • Stopped: Fragment不再可见,此时的情形可能是Fragment所在的Activity已经stopped了,或者fragment从Activity中移除到Fragment回退栈中。一个Stopped状态的Fragment不没有被销毁,还在存活状态,它的状态和内部信息被系统记录和保存,只是不可见,不可交互,此时很可能会被系统回收。

与Activity类似,你可以利用Bundle来记录Fragment的状态,当Activity被销毁需要记录Fragment状态,并且在Activity重新创建的时候恢复Fragment的状态。你可以保存Fragment的状态在Fragment的onSaveInstanceState()回调方法中,在onCteat()、onCreatView()或者onActivityCreated()方法中进行恢复。

在生命周期中Activity与Fragment的最大不同之处是回退栈是相互独立的,Activity的回退栈是系统来管理的,Fragment的回退栈是被宿主Activity来管理的,也就是说你可以来进行控制(调用addToBackStack()).

注意:在Fragment中你如果要获取一个Context对象,你可以调用getActivity()方法,但是调用getActivity()方法必须要在Fragment于Activity关联起来之后,否则getActivity()返回为null。

上面说的都是Fragment的一些生命周期相关知识,下面来看看如何创建Fragment并且添加一个View给Fragment。

要想给Fragment添加一个View,你就必须重写onCreateView方法,在这个方法中创建一个View并且返回,这个View是Fragment的根View。在这个方法中系统给你提供了LayoutInflater对象,通过这个对象你可以从xml文件中创建一个View,代码如下:

publicstaticclassExampleFragmentextendsFragment{``  ``@Override``  ``publicView
onCreateView(LayoutInflaterinflater,ViewGroupcontainer,``               
``BundlesavedInstanceState){``    ``// Inflate the layout for this fragment``   
``returninflater.inflate(R.layout.example_fragment,container,``false``);``  ``}``}

在onCreatView方法中container参数是一个ViewGroup,这个ViewGroup是从Activity传递过来的,是Fragment的View将要嵌入的那个父View。这里需要注意一下LayoutInflater的inflate函数,在这里第三个参数是false。

public Viewinflate (int resource, ViewGrouproot, boolean attachToRoot)

Parameters

resource

ID for an XML layout resource to load (e.g., R.layout.main_page)

root

Optional view to be the parent of the generated hierarchy (if attachToRoot is true), or else simply an object that provides a set of LayoutParams values for root of the returned hierarchy (if attachToRoot is false.)

attachToRoot

Whether the inflated hierarchy should be attached to the root parameter? If false, root is only used to create the correct subclass of LayoutParams for the root view in the XML.

Returns

  • The root View of the inflated hierarchy. If root was supplied and attachToRoot is true, this is root; otherwise it is the root of the inflated XML file.

在这解释一下inflate的三个参数含义:

resource:是所要解析的layout文件ID;

root:一个ViewGroup,attachToRoot为true时会作为从xml文件解析出来的view的根View,如果attachToRoot为false时仅仅提供一些布局的参数给返回的rootView;

attachToRoot:决定解析的view是否会绑定到root参数提供的view上。

以上就是Fragment的生命周期和如何创建一个Fragment的View。

尾述

FFmpeg 是一个强大的专门音视频处理的库,很多播放器都是基于 FFmpeg 进行的开发;文章所提的功能只是罗列了 FFmpeg 可使用功能的一部分,更多 FFmpeg 相关的学习资料私信发送“音视频进阶”,即可获取一份高级音视频学习手册;希望这份手册能够给大家学习音视频带来一些帮助

在 Fragment 生命周期中,有哪些回调方法?

好了,以上就是今天要分享的内容,大家觉得有用的话,可以点赞分享一下;如果文章中有什么问题欢迎大家指正;欢迎在评论区或后台讨论哈~

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://yundeesoft.com/40482.html

(0)

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信