本文已经同步到个人公众号,欢迎关注更多

Fragment译文为碎片,理解为嵌套在Activity中可重复使用一部分,典型定义为用户界面的一部分。Fragment必须嵌套在Activity中,不可以单独使用。Fragment的行为和Activity的行为很相似,Fragment对旧版本具有支持库。

在Activity中使用Fragment

在Activity中使用Fragment有两种方式:使用java代码动态创建和使用XML静态创建

在Activity中使用一个“支持”的Fragment之前,我们此需要确保我们的Activity继承自FragmentActivity或者AppCompatActivity,两者都提供了一个对所有Android版本支持的fragment manager。

例如:

静态Fragment嵌套在父Activity布局中使用,如下

小结:静态与动态的区别就是:静态的fragment是固定,不可以替换,而动态Fragment是可以通过FragmentTransaction动态代替,后文会讲解。在java中使用动态加载Fragment是通过FragmentManager。FragmentManager和FragmentTransaction这两个类允许我们在程序运行时在布局动态的加载、移除和替换Fragment。例如:

小结:在更多的情况下,推荐使用动态加载Fragment,因为具有很大灵活性。

Fragment的生命周期

像Activity一样,Fragment有很多的重写方法是与它的生命周期相关联的。下面介绍它们的方法。

onAttach():当Fragment与Activity关联时被调用,即在Activity创建Fragment实例时刻。

onCreate():被调用于初始化Fragment数据的相创建工作。

onCreateView():用于Fragment加载视图。

onViewCreated():在onCreateView()之后被调用,确保Fragment的根视图不为空,以及所有的视图的初始化都发生该方法,如视图的查找,监听的设置。

onActivityCreated():当宿主Activity完成onCreate()方法后被调用。

onStart():当Fragment准备好展示在屏幕时被调用,即此时屏幕还没有出现界面之前,还不可以与用户交互,不可获得焦点。

onResume():分配“昂贵”的资源,如位置的标记、传感器的更新,等等,此方法调用后,界面以处于可见状态,此时,Fragment是处于运行状态,可以和用户交互的。


onPause():释放“昂贵”的资源,提交一些更改。

onDestroyView():当Fragment即将被销毁时调用,此时Fragment还存在;

onDestroy():当Fragment不再被使用时调用。

onDetach():但onDetach()不再关联宿主Activity时被调用。

Fragment的生命周期到此结束(真累,这么长的生命周期)。

用图理解人生吧

小结:几乎所有的Fragment都要重写onCreateView()方法来加载视图,而onCreate()和onActivityCreated则分别用来初始化数据和在宿主Activity加载完onCreate()之后设置一些数据。

看看例子:

获取Fragment实例的三种方法

1、静态加载在xml的Fragment可以通过调用FragmentManager的findFragmentById()方法获得。

2、动态加载的的Fragment可以通过调用FragmentManager的findFragmentByTag()方法获得。

3、在使用FragmentPagerAdapter的ViewPager中获得通过调用getRegisteredFragment()方法获得。

通过findFragmentById

通过findFragmentByTag

通过getRegisteredFragment

Fragment的数据交流

Fragment一般通过它直接的父Activity进行通信,通过它们的宿主Activity的协调与其它Activity或Fragment进行通信,而不是在Fragment之间或者在Fragment与其它Activity之间直接进行数据交流。

例外的情况:就是对话框Fragment(dialog fragments)和嵌套Fragment(netstd child fragments)两者。两者的共同点都是嵌套在Fragment内,作为Fragment的子类,所以允许它们与父类(Fragment)通信。(前者没用过)

Fragment与Activity通信方式有三种方式:

1、Bndle-Activity可以创建一个fragment实例并设置arguments。

2、Methods-Activity可以通过fragment的实例调用它的方法。

3、Listener-Fragment可以通过接口回调一个监听事件。

总而言之:(太长了,不想翻译,看图)

Fragment with Arguments(传递参数给Fragment)

Android不许我们创建带有参数的构造器,所以平常我们都是使用它的默认构造函数,当要传递参数给Fragment,那我们通常的做法就是创建一个静态方法newInstance.

Fragment Listener

​    ​前面说到,要与Activity通信有三种方法,其中之一就定义内部接口,让宿主Activity去实现该接口。

ActionBar Menu Items and Fragments(在Fragment中使用ActionBar的Menu)

一些情况下,我们的Fragment要在ActionBar中使用菜单选项,那么我们就像在Activity中使用一样 ,直接在Fragment中增加onCreateOptionsMenu方法。


可以看到比Activity多了一个MenuInflater参数,在此时还没办法在Fragment使用菜单选项,需要在Fragment的onCreate方法增加setHasOptionMenu(true)来通知Fragment。


响应菜单选中


注意:该方法仅在宿主Activity不消耗事件的情况下才会被调用。

​长按关注,更多精彩哦

简易记账开发笔记之Fragment(前传)相关推荐

  1. 简易记账开发笔记之Fragment(后续)

    在前文中讲到在Activity中如何动态添加Fragment是使用FragmentManger和FragmentTransction这两个类的,那么什么是FragmentManger和Fragment ...

  2. 简易记账开发笔记之GridLayout

    简易记账开发笔记之GridLayout 网格布局(GridLayout)是Android布局中的一种,与LinearLayout很相似,但拥有的一些独特的属性,闻名知意,网格布局就是一种类似于网格的布 ...

  3. UEFI开发探索11 – 鼠标前传

    (请保留-> 作者: 罗冰   https://blog.csdn.net/luobing4365) 这篇博客不是要写鼠标的历史,而是记录在很久以前,在Legacy BIOS下,我写鼠标驱动(B ...

  4. Java 开发笔记 - wangEditor 编辑器图片上传

    Java 开发笔记 - wangEditor 编辑器图片上传 前言 转型 java 开发后入手的第一个项目,写写博客记录一下 该项目使用的是 sping boot + mybatis plus + t ...

  5. 运维开发笔记整理-前后端分离

    运维开发笔记整理-前后端分离 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.为什么要进行前后端分离 1>.pc, app, pad多端适应 2>.SPA开发式的流 ...

  6. DayDayUp:《机器崛起前传》第二十二章【蹒跚而来】读后感(文章源自网络)—听课笔记

    DayDayUp:<机器崛起前传>第二十二章[蹒跚而来]读后感(文章源自网络)-听课笔记 <机器崛起前传> 1.机器岂不能有自我?         计算机的发展历程可谓蹒跚.从 ...

  7. Android开发笔记(一百六十六)H5通过WebView录像上传

    前面的博文< Android开发笔记(一百五十二)H5通过WebView上传图片>介绍了如何拍照上传给网页,不料客户又要求再加个摄像上传给网页.既然如此,那么再探讨一下如何实现这个摄像上传 ...

  8. Android开发笔记(一百一十)使用http框架上传文件

    HTTP上传 与文件下载相比,文件上传的场合不是很多,通常用于上传用户头像.朋友圈发布图片/视频动态等等,而且上传文件需要服务器配合,所以容易被app开发者忽略.就上传的形式来说,app一般采用htt ...

  9. Caffe学习笔记(二):Caffe前传与反传、损失函数、调优

    Caffe学习笔记(二):Caffe前传与反传.损失函数.调优 在caffe框架中,前传/反传(forward and backward)是一个网络中最重要的计算过程:损失函数(loss)是学习的驱动 ...

最新文章

  1. 德国最有影响力的数学家(上)
  2. C语言类型转换大学霸IT达人
  3. mysql创立不了数据库_以下不属于MySQL安装时自动创建的数据库是( ) (5.0分)_学小易找答案...
  4. 【网络安全】记一次接口加密测试
  5. 利用Spring的Aop实现项目的日志监控
  6. ACCESS SQL语法参考
  7. 机器学习实战 k-近邻算法 手写识别系统
  8. Vim编辑器显示行号且定义tab键为4个空格
  9. SWPUACM第二次周赛
  10. CHROME 拖动安装插件报错CRX_HEADER_INVALID的解决办法
  11. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_6-3.微信网站扫码支付介绍...
  12. MMD-MikuMikuDance简易教程(包含软件、资源下载、MME特效中文说明、等等)
  13. javascript监听输入框_js监听输入框值的即时变化onpropertychange、oninput
  14. OpenCASCADE(OCC)读取STEP模型文件到XDE中
  15. Win10 没有激活,如何改变任务栏位置
  16. windows7 中pkeyconfig.xrm-ms文件无法删除解决办法
  17. ES6 计算属性名快速上手
  18. 【附源码】计算机毕业设计java制造型企业仓储管理系统设计与实现
  19. python dialect='excel'是什么意思_python excel自动化写入大数据量数据
  20. 安装linux无法进入图形界面,centos7安装进不去图形界面

热门文章

  1. 文献阅读---多年生黑麦草种质中与耐热性相关的生理性状、分子标记和叶绿素分解代谢基因的自然变异
  2. 一个 Git 库内管理多个子项目
  3. java 设置图片像素_java设置图片像素
  4. 我的阿里云盘资源搜索引擎首次试运行
  5. 机器学习:几种分类识别问题
  6. 常用诊疗操作技术题库【1】
  7. k8s 有状态服务部署
  8. 树莓派4BUbuntu server 20.04 Kubernetes-v1.17.x- Docker19.03 keadmv1.10.3部署错误一览
  9. 哈工大人工智能暑期课实践项目——手写体识别四则运算(项目计划)
  10. 几个免费的长链接缩短链接工具