【Android面试】Fragment相关
发布日期:2021-06-28 19:08:28
浏览次数:3
分类:技术文章
本文共 1402 字,大约阅读时间需要 4 分钟。
Fragment 是在Android3.0被引入的。主要是为了给大屏幕手机提供支持。
Fragment的简单定义:
Fragment可以理解为一个自己具有生命周期的控件,它既有自己的处理能力,又有自己的生命周期,但是又必须依赖于Activity,能互相通信和托管
Fragment的几个优点:
代码复用。适合模块化开发。一个Fragment可以被多个Activity嵌套,有共同的业务模块就可以进行套用
Activity管理Fragment。Fragment的生命周期是寄托于Activity上面的,Fragment可以被Attach添加和Deatch释放掉
可控性。Fragment可以像普通对象那样自由的创建和控制,传递参数更加容易和方便,也不用处理系统相关的事情,显示方式,替换,不管是整体还是部分,都可以做到相应的更改。
解耦性。
Fragment的生命周期
相比于Activity的生命周期,Fragment的生命周期会多一些,主要是Fragment依附在Activity上。
onAttach:
Fragment和Activity建立关联的时候进行调用,被附加到Activity上onCreate:
创建Fragment的时候调用,初始化一些资源文件onCreateView:
Fragment首次绘制用户界面调用onViewCreated:
Fragment被绘制后,调用此方法,可以初始化控件资源onActivityCreated:
当onCreate,onCreateView,onViewCreated方法执行后进行调用Fragment的使用方式
- 静态用法 1 继承Fragment,重写onCreateView来决定布局 2 在Activity声明此Fragment,和普通的View一样
- 动态用法 1 继承Fragment,重写onCreateView来决定布局 2 Activity布局使用id,动态添加Fragment
动态添加Fragment步骤
1 获取到FragmentManager,在Activity中通过getFragmentManager来获得
2 开启事务,使用beginTransaction 3 向容器中加入Fragment,一般用replace方法,传入容器id和Fragment的实例 4 提交事务,使用commit提交一般代码:
Fragment1 fragment1 = new Fragment1(); getFragmentManager().beginTransaction().replace(R.id.main_layout, fragment1).commit();
Fragment通信
- Activity与Fragment的通信
findFragmentById 或者 findFragmentByTag
- Fragment与Fragment的通信 先通过获取到Activity,再使用接口的方式进行通信
Fragment 的注意事项
- Fragment在Activity中只有一个ID或Tag标识的实例
- 一个Activity中有一个Fragment池,实例不一定被销毁,可能会存在池子中
- FragmentManager的作用范围是整个Activity,所以,某一个布局ID,不能重复被Fragment替换
更多参考:
转载地址:https://blog.csdn.net/xudailong_blog/article/details/82357125 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2024年04月03日 05时51分36秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
RedisTemplate value序列化导致的问题
2019-04-29
支付宝回调接口验签失败
2019-04-29
关于码云开源项目SpringBootAdmin多数据源配置
2019-04-29
jeesite使用心得(一)
2019-04-29
jeesite使用心得(二)
2019-04-29
JAVA实现美团电影价格抓取(附代码)
2019-04-29
jeesite的junit,数据没有插入?
2019-04-29
jqweui的picker动态加载数据
2019-04-29
vue省市区三级联动mysql,js/json,html/jsp
2019-04-29
elasticsearch5.5安装head插件
2019-04-29
linux安装docker部署java项目
2019-04-29
jquery的Ajax和fetch的demo
2019-04-29
阿里云服务器发送邮件失败?连接超时?25端口被封?
2019-04-29
springboot版的微信公众号,订阅号
2019-04-29
pycharm创建django项目linux部署
2019-04-29
利用Android Studio快速搭建App
2019-04-29
CompletableFuture的多线程和异步监听实现
2019-04-29
HashMap jdk1.7和1.8概述
2019-04-29
springboot多环境加载yml和logback配置
2019-04-29