Fragment浅析

定义

显示在Activity中的Activity,可以显示在Activity中,他袭击本身也可以显示一些内容,拥有自己的生命周期。

生命周期

因为Fragment是依附于Activity存在的,因此它的生命周期收到Activity的生命周期影响。


image.png

Fragment比Activity多了几个生命周期的回调方法:

onAttach(Activity) 当Fragment与Activity发生关联的时候调用
onCreateView(LayoutInflater, ViewGroup, Bundle) 创建该Fragment的视图
onActivityCreated(Bundle) 当Activity的onCreated方法返回时调用
onDestroyView() 与onCreateView方法相对应,当该Fragment的视图被移除时调用
onDetach() 与onAttach方法相对应,当Fragment与Activity取消关联时调用
PS:注意:除了onCreateView,其他的所有方法如果你重写了,必须调用父类对于该方法的实现

使用方式

  • 静态使用Fragment
    步骤:
    ①创建有个类继承Fragment,重写onCreateView()方法,来确定Fragment要显示的布局
    ②在Activity中申明该类,与普通的view对象一样
  • 动态使用Fragment
    ① 在Acitivity对应的布局中写上一个FramLayout控件,此空间的作用是当作Fragment的容器,Fragment通过FrameLayout显示在Acitivity里,这两个单词容易混淆,请注意
    ② 准备好你的Fragment,然后再Activity中实例化,v4包的Fragment是通过getSupportFragmentManager()方法新建Fragment管理器对象,此处不讨论app包下的Fragment
    ③ 然后通过Fragment管理器对象调用beginTransaction()方法,实例化FragmentTransaction对象,有人称之为事务
    ④ FragmentTransaction对象【以下直接用transaction代替】,transaction的方法主要有以下几种:
    transaction.add() 向Activity中添加一个Fragment
    transaction.remove() 从Activity中移除一个Fragment,如果被移除的Fragment没有添加到回退栈(回退栈后面会详细说),这个Fragment实例将会被销毁
    transaction.replace() 使用另一个Fragment替换当前的,实际上就是remove()然后add()的合体
    transaction.hide() 隐藏当前的Fragment,仅仅是设为不可见,并不会销毁
    transaction.show() 显示之前隐藏的Fragment
    detach() 会将view从UI中移除,和remove()不同,此时fragment的状态依然由FragmentManager维护
    attach() 重建view视图,附加到UI上并显示
    ransatcion.commit() 提交事务
    注意:在add/replace/hide/show以后都要commit其效果才会在屏幕上显示出来

什么是Fragment的回退栈

Fragment的回退栈是用来保存每一次Fragment事务发生的变化 如果你将Fragment任务添加到回退栈,当用户点击后退按钮时,将看到上一次的保存的Fragment。一旦Fragment完全从后退栈中弹出,用户再次点击后退键,则退出当前Activity

Fragment与Activity之间的通信

Fragment依附于Activity存在,因此与Activity之间的通信可以归纳为以下几点:

  • 如果你Activity中包含自己管理的Fragment的引用,可以通过引用直接访问所有的Fragment的public方法
  • 如果Activity中未保存任何Fragment的引用,那么没关系,每个Fragment都有一个唯一的TAG或者ID,可以通过getFragmentManager.findFragmentByTag()或者findFragmentById()获得任何Fragment实例,然后进行操作
  • Fragment中可以通过getActivity()得到当前绑定的Activity的实例,然后进行操作。

你可能感兴趣的:(Fragment浅析)