【Android】Fragment的简单笔记

被虐了,做某公司笔试时,发现自己连个Fragment的生命周期都写不详细。平时敲代码,有开发工具的便利,有网上各大神的文章,就算忘了也很容易的可以查到,但当要自己不借助外界,却发现自己似乎对该知识点并不是很理解。
所以,还是老老实实的做好笔记。本篇随笔介绍的是Fragment,这类的文章网上很多,题主还是个小渣,就只是简单的记录,借机巩固基础,如果有理解错的地方,还望指点一下。


Fragment介绍

关于Fragment的介绍网上很多,有说是用来支持不同屏幕手机的布局的,官网上也介绍说能给用户提供一种动态、灵活的交互体验。
但对于一个新手来说,学习的层面,很少需要去考虑到适配不同屏幕手机的需求。毕竟新手更多的是学习一个知识点如何使用,而不是做一个产品出来。所以新手对Fragment接触的频率可能会比较少,毕竟简单的程序Activity就可以满足了。
题主也是小渣一枚,对于Fragment的理解,更多的是觉得它的动态增加、移除、替换非常实用。
因为新手学习常常是模仿一些比较出名的App,很多App都会有统一的标题栏、底部栏之类的,更换的只是内容区的界面,这种情况如果还只是用Activity来实现,项目里就会有大量重复的代码,后期需要修改某个地方,将是一件恐怖的事。所以,这时候使用Fragment就非常好了。

Fragment生命周期

Fragment是依附于Activity存活的,网上也说可以将Fragment看成是迷你型的Activity,这样一来,Fragment的生命周期也就很容易理解了。先附上张图:

810210-20160526170900897-1710664205.jpg

因为Fragment是依附于Activity的,所以当Activity执行完onCreate后,Fragment也就相应的执行它的回调函数。
这里也很好理解,首先是先关联,关联成功后创建对象,接着创建视图。摧毁时正好反过来,先摧毁视图,然后摧毁对象,最后再取消关联。其他回调函数都跟Activity一样。

刚学习时可以把日志打印出来,自己琢磨几遍也就清楚流程了,如下图:

①onCreate --> onResume (onResume后Activity/Fragment就处于运行状态:可见,有焦点,可交互)

810210-20160526171657725-1478535029.jpg

②onStop --> onRestart --> onResume (当活动从后台重新进入前台时执行的回调函数)

810210-20160526171717366-1874013906.jpg

③摧毁过程

810210-20160526171726678-1044302690.jpg

Fragment使用

首先是了解,了解完后就要开始学习该怎么使用了。网上都介绍说有两种方式,静态和动态。其实也就是要么在布局文件xml中直接把Fragment当成普通的组件使用,要么在java代码中动态的添加、替换、移除。有些类似于广播的使用方式。

①静态使用

首先先创建一个Fragment的布局文件:fragment_phone.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:layout_width="match_parent"android:layout_height="match_parent"android:gravity="center"android:text="PHONT" />
</LinearLayout>

然后创建一个FragmentPhone类继承自Fragment:FragmentPhone.java

public class FragmentPhone extends Fragment {@Nullable@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {Log.d(TAG, "onCreateView");return inflater.inflate(R.layout.fragment_phone, container, false);}}

至于为什么要创建这个类,题主的理解是:因为要把Frament当成普通的组件在布局文件中使用,但Fragment的布局是由我们自己定义决定的,所以可以把它当成是自定义组件,那就按照自定义UI的方式来操作了。
onCreateView也就类似于Activity的onCreate,我们需要在这里为我们的Fragment指定相应的布局文件。

最后就是在Activity的布局文件中使用:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"app:layout_behavior="@string/appbar_scrolling_view_behavior"tools:context="com.iwin.fragment01.MainActivity"tools:showIn="@layout/app_bar_main"><fragmentandroid:name="com.iwin.fragment01.FragmentPhone"android:layout_width="match_parent"android:layout_height="match_parent" />
</RelativeLayout>

使用fragment标签,和android:name属性来指定具体的Fragment就大功告成了。

总结下,静态使用方法:创建Fragment布局文件 ---> 创建FragmentPhone类继承Fragment,在onCreateView方法中指定布局文件 ---> 使用fragment标签和android:name属性来指定使用哪个Fragment。

②动态使用

首先创建Fragment布局文件,跟静态使用时第一步一样。

然后创建Fragment***类继承Fragment,在onCreateView方法中指定布局文件,仍然跟静态使用的第二步一样。

最后在Activity类的onCreate方法中使用:

public class MainActivity extends AppCompatActivity {private FragmentPhone fphone;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);Log.i(TAG,"onCreate");setContentView(R.layout.activity_main);if (savedInstanceState == null){FragmentManager fm = getFragmentManager();FragmentTransaction ft = fm.beginTransaction();fphone = new FragmentPhone();ft.add(R.id.content,fphone);ft.commit();}}
}

先获取FragmentManager的对象,然后开启一个事务,指定操作(添加,替换,移除,隐藏等),最后提交事务就可以了。
至于为什么要通过事务来操作Fragment,题主的理解是:因为一个过程我们可以指定多个操作,比如隐藏当前Fragmetn,然后再添加一个新的Fragment进来等等,如果在完成部分操作时程序出问题了,那么这时界面就会处于一个奇怪的现状。而事务可以保证操作要么全部完成,要么一个都不做。
其实也就是从数据库的事务概念来理解了,也不知道对不对,至少这样理解可以加深点印象。

对Fragment的操作(添加,替换,移除等)需要通过FragmentTransaction提供的API来操作,FragmentRransaction实例可以通过FragmentManager类的benginTransaction()获得。而FragmentManager的实例则可以通过Activity的getFragmentManager()获取。

对Fragment的操作示例:(ft是FragmentTransaction 的一个实例对象。)

添加

ft.add(R.id.content,fphone);
第一个参数是指定一个来放置你的Fragment的ViewGroup(FrameLayout等),第二个参数就是一个Fragment的实例对象。

替换

ft.replace(R.id.content,fcamera);
参数同上。

总结下,动态使用Fragment前两步跟静态一样,需要创建Fragment布局文件和类 ---> 通过Activity的getFragmentManager()获取FragmentManager实例 ---> 通过FragmentManager的beginTransaction()获取FragmentTransaction的实例 ---> 调用获取FragmentTransaction的API,如ft.add(要放置Fragment的ViewGroup,Fragment实例) ---> 提交事务如ft.commit()


暂时就先记录这些基础的知识点了,后面等用多了Fragment,对于与Activity的通信,以及一些其他特殊的用法熟悉了再来做笔记。

转载于:https://www.cnblogs.com/dasusu/p/5532280.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/255212.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三、致敬“张正友标定”

三、致敬“张正友标定” 此处“张正友标定”又称“张氏标定”&#xff0c;是指张正友教授于1998年提出的单平面棋盘格的摄像机标定方法。张氏标定法已经作为工具箱或封装好的函数被广泛应用。张氏标定的原文为“A Flexible New Technique forCamera Calibration”。此文中所提到…

Using KernelShark to analyze the real-time scheduler【转】

转自&#xff1a;https://lwn.net/Articles/425583/ This article brought to you by LWN subscribers Subscribers to LWN.net made this article — and everything that surrounds it — possible. If you appreciate our content, please buy a subscription and make the …

3、时间和随机数

一、时间 1.1 使用Calendar/[ˈkləndɚ]/类获取时间 1.1.1 常用方法 (1)public static Calendar getInstance&#xff08;&#xff09;: 使用默认时区和语言环境获取一个基于当前时间的Calendar对象。 (2)public int get(int field) 返回给定日历字段表示的日历部分的数字…

哥尼斯堡的“七桥问题” (欧拉回路,并查集)

哥尼斯堡的“七桥问题” (25分) 哥尼斯堡是位于普累格河上的一座城市&#xff0c;它包含两个岛屿及连接它们的七座桥&#xff0c;如下图所示。 可否走过这样的七座桥&#xff0c;而且每桥只走过一次&#xff1f;瑞士数学家欧拉(Leonhard Euler&#xff0c;1707—1783)最终解决…

无人驾驶汽车之争本田为何未战先败

摘要 : 本田汽车的研发部门对于汽车虽然理解深刻&#xff0c;但从整体而言&#xff0c;本田的造车理念还停留在上个时代&#xff0c;在未来的无人驾驶竞争中&#xff0c;本田已经有未战先啊败的苗头。 百度百家The BIG Talk硅谷站连续5小时的高密度头脑风暴&#xff0c;果然让人…

理解git结构与简单操作(四)合并分支的方法与策略

接上节&#xff0c;此时的dev分支与master分支的进度就不一样了&#xff0c;所以需要将dev分支与master分支同步。这里需要的就是合并分支的操作&#xff0c;大家应该都知道用git merge或者git rebase。 git merge merge&#xff0c;即「合并」。 fast-forward 当出现我们上面图…

摄像机标定

利用摄像机所拍摄到的图像来还原空间中的物体。在这里&#xff0c;不妨假设摄像机所拍摄到的图像与三维空间中的物体之间存在以下一种简单的线性关系&#xff1a;[像]M[物],这里&#xff0c;矩阵M可以看成是摄像机成像的几何模型。 M中的参数就是摄像机参数。通常&#xff0c;这…

Linux下Tomcat重新启动

在Linux系统下&#xff0c;重启Tomcat使用命令操作的&#xff01; 首先&#xff0c;进入Tomcat下的bin目录 cd /usr/local/tomcat/bin 使用Tomcat关闭命令 ./shutdown.sh 查看Tomcat是否以关闭 ps -ef|grep java 如果显示以下相似信息&#xff0c;说明Tomcat还没有关闭 root …

大数据和人工智能的关系是什么?

何为大数据&#xff1f;何为人工智能&#xff1f; 大数据&#xff0c;百度百科上是这么定义的&#xff0c;指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合&#xff0c;是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率…

张正友标定法 【计算机视觉学习笔记--双目视觉几何框架系列】

三、致敬“张正友标定” 此处“张正友标定”又称“张氏标定”&#xff0c;是指张正友教授于1998年提出的单平面棋盘格的摄像机标定方法。张氏标定法已经作为工具箱或封装好的函数被广泛应用。张氏标定的原文为“A Flexible New Technique forCamera Calibration”。此文中所提到…

软工网络15个人阅读作业2——提问题

提出问题 快速通读教材《构建之法》&#xff0c;并参照提问模板&#xff0c;提出5个问题。 问题一&#xff1a; p83有一段话&#xff1a; 两人在一起合作&#xff0c;自然会出现不同意见&#xff0c;每个人都有自己的想法&#xff0c;在两个人平等合作的情况下&#xff0c;不存…

绝对路径VS相对路径

绝对路径&#xff1a;不必赘述&#xff0c;就是从盘符开始写直到找到你所需要的文件为止&#xff0c;把所有的目录写完整即可。但是在做网站的时候绝对不推荐用绝对路径&#xff0c;因为不可能服务器中的路径和在做设计时候所用的电脑的路径一致&#xff0c;也不可能说在服务器…

四、极大似然参数估计

四、极大似然参数估计 此篇博文&#xff0c;玉米将和大家分享一下“张氏标定”除几何推导外的另外一大精髓&#xff1a;参数估计。 张教授在大作“A Flexible New Technique for Camera Calibration”中的原话如下&#xff1a;” The above solution is obtained through minim…

xtrabackup安装使用

2019独角兽企业重金招聘Python工程师标准>>> 【MySQL】xtrabackup安装使用 拾荒者charley 关注 2018.03.19 09:19 字数 186 阅读 17评论 0喜欢 0 前言&#xff1a;说到MySQL备份&#xff0c;主要采用的方法无非就是mysqldump/mysqldumper以及我们今天要说的热备利器…

2017/3/10 morning

转载于:https://www.cnblogs.com/bgd140206325/p/6529497.html

六、张正友标定法小结

六、张正友标定法小结 这一博文&#xff0c;是玉米后补上的。因为觉得前面用了三篇博文来描述张氏标定法&#xff0c;略显散乱。在这里总结一下&#xff0c;使条理清晰一点。另外关于张氏标定所得参数也还有两点需要澄清。下面这个总结&#xff0c;其实也是在“A Flexible New …

SqlServer图形数据库初体验

SQL Server2017新增了一个新功能叫做图形数据库。图形指的拓扑图形&#xff0c;是一些Node表和Edge表的合集&#xff0c;Node对应关系数据库中的实体&#xff0c;比如一个人、一个岗位等&#xff0c;Edge表指示Node之前的关系&#xff0c;比如张三在经理岗位。图形表比较适合用…

Oracle CASE WHEN 用法介绍

1. CASE WHEN 表达式有两种形式 --简单Case函数 CASE sex WHEN 1 THEN 男 WHEN 2 THEN 女 ELSE 其他 END --Case搜索函数 CASEWHEN sex 1 THEN 男 WHEN sex 2 THEN 女 ELSE 其他 END 2. CASE WHEN 在语句中不同位置的用法 2.1 SELECT CASE WHEN 用法 SELECT grad…

五、畸变矫正—让世界不在扭曲

五、畸变矫正—让世界不在扭曲 这篇博文所要讲述的内容&#xff0c;是标定的主要用途之一&#xff1a;矫正摄像机的畸变。对于图像畸变矫正的方法&#xff0c;张正友教授也在其大作“A Flexible New Technique forCamera Calibration”中给出。 玉米在这里先为大家介绍一下&…

《MySQL必知必会》[01] 基本查询

《MySQL必知必会》&#xff08;点击查看详情&#xff09;1、写在前面的话这本书是一本MySQL的经典入门书籍&#xff0c;小小的一本&#xff0c;也受到众多网友推荐。之前自己学习的时候是啃的清华大学出版社的计算机系列教材《数据库系统概论》&#xff0c;基础也算是半罐水&am…