Android碎片Fragment详讲(1)

Fragment

Fragment创建的步骤

1、        继承fragment一定是V4包下的

2、        有且只有一个无参的构造方法

3、        如果Fragment需要显示界面,需要重写onCreateView方法

4、        指定布局资源,或者创建布局,返回即可

静态创建fragment时:

需要指定fragment的class属性 以及给Fragment加上id或者tag属性

 

在onCreateView内部,可以设置控件的内容,开启线程,连接网络.。

Fragment的作用

1、        简化重复的开发工作,将内容与工程整合,最终提供功能的重用性

2、        体改内聚,减少耦合成都度

3、        Fragment用于布局界面的切分和优化,减少布局的重复,提高开发的效率。

通常tab样式的切换,,使用RadioGroup。

 

主流的底部tab切换页面的设计方式:就是中间一个FrameLayout 底部RadioGroup 切换时,替换FrameLayout中的fragment

每一个Fragment可以通过两种方式添加到activity中

1)        使用fragment标签直接添加到activity

2)    使用代码来添加使用两个类,Frgamentmanager SupportFragmentManager

3)    内部添加删除替换隐藏显示,需要manager.beginTransaction()

4)    事物每次操作之前必须重启,不允许使用成员变量的方式。

Fragment的生命周期:

1、        Fragment的声明周期和activity的声明周期相似

2、        以为Fragment依赖于Activity显示,那么当Activity发生生命周期变化的时候,Fragment同样发生相同的变化,包括

1)        onCrate

2)        onStart

3)        onResume

4)        onPause

5)        onStop

6)        onDestroy

Fragment还有一些声明周期

onAttach()执行该方法时,Fragment与Activity已经完成绑定,该方法有一个Activity类型的参数,代表绑定的Activity,这时候你可以执行诸如mActivity = activity的操作。
onCreate():初始化Fragment。可通过参数savedInstanceState获取之前保存的值。
onCreateView()初始化Fragment的布局。加载布局和findViewById的操作通常在此函数内完成,但是不建议执行耗时的操作,比如读取数据库数据列表。
onActivityCreated()执行该方法时,与Fragment绑定的Activity的onCreate方法已经执行完成并返回,在该方法内可以进行与Activity交互的UI操作,所以在该方法之前Activity的onCreate方法并未执行完成,如果提前进行交互操作,会引发空指针异常。
onStart():执行该方法时,Fragment由不可见变为可见状态。
onResume():执行该方法时,Fragment处于活动状态,用户可与之交互。
onPause():执行该方法时,Fragment处于暂停状态,但依然可见,用户不能与之交互。
onSaveInstanceState()保存当前Fragment的状态。该方法会自动保存Fragment的状态,比如EditText键入的文本,即使Fragment被回收又重新创建,一样能恢复EditText之前键入的文本。
onStop():执行该方法时,Fragment完全不可见。
onDestroyView()销毁与Fragment有关的视图,但未与Activity解除绑定,依然可以通过onCreateView方法重新创建视图。通常在ViewPager+Fragment的方式下会调用此方法。
onDestroy():销毁Fragment。通常按Back键退出或者Fragment被回收时调用此方法。
onDetach()解除与Activity的绑定。在onDestroy方法之后调用。

生命周期:



当Activity启动后,首先执行activity的onCreate方法,之后执行Fragment的onAttch方法,当进行replace方法是,执行onDetachon方法。


启动APP的声明周期变化:


当fragment进行切换的时候,生命周期的变化:


首先是两一个Fragment先与Activity进行连接,执行onAttach方法,

之后Fragment执行onCraete方法,

之前的fragment进入到不可见状态onPause,之后之前的Fragment onStop 销毁界面,之后销毁,之后与Activity失去联系,

此时先的Fragment创建View视图,执行onCrateView方法,之后onActivityCrate方法,start,进入活动状态onResuume状态。

点击back键:

Fragment  执行onPuase不可见onStop  ondestroyView   ondestroy onDetach方法。


这个界面的时候,执行onPause  onstop

 

恢复之后:Fragment onStart   Activity onstart  Activity onResume   Fragment onResume

 

 

 

参考:借鉴于网络

生命周期变化 : 切换到该Fragment

 

05-21 14:26:35.095:D/FragmentDemo(7649): onAttach

 05-21 14:26:35.095: D/FragmentDemo(7649):onCreate

 05-21 14:26:35.095: D/FragmentDemo(7649):onCreateView

 05-21 14:26:35.100: D/FragmentDemo(7649):onActivityCreated

 05-21 14:26:35.120: D/FragmentDemo(7649):onStart

 05-21 14:26:35.120: D/FragmentDemo(7649):onResume

 

屏幕灭掉:

 

05-21 14:27:35.185:D/FragmentDemo(7649): onPause

 05-21 14:27:35.205: D/FragmentDemo(7649):onSaveInstanceState

 05-21 14:27:35.205: D/FragmentDemo(7649):onStop

 

屏幕解锁

 

05-21 14:33:13.240:D/FragmentDemo(7649): onStart

 05-21 14:33:13.275: D/FragmentDemo(7649):onResume

 

切换到其他Fragment:

 

05-21 14:33:33.655:D/FragmentDemo(7649): onPause

 05-21 14:33:33.655: D/FragmentDemo(7649):onStop

 05-21 14:33:33.660: D/FragmentDemo(7649):onDestroyView

 

切换回本身的Fragment:

 

05-21 14:33:55.820:D/FragmentDemo(7649): onCreateView

 05-21 14:33:55.825: D/FragmentDemo(7649):onActivityCreated

 05-21 14:33:55.825: D/FragmentDemo(7649):onStart

 05-21 14:33:55.825: D/FragmentDemo(7649):onResume

 

回到桌面

 

05-21 14:34:26.590:D/FragmentDemo(7649): onPause

 05-21 14:34:26.880: D/FragmentDemo(7649):onSaveInstanceState

 05-21 14:34:26.880: D/FragmentDemo(7649):onStop

 

 

 

回到应用

05-21 14:36:51.940:D/FragmentDemo(7649): onStart

 05-21 14:36:51.940: D/FragmentDemo(7649):onResume

 

退出应用

05-21 14:37:03.020:D/FragmentDemo(7649): onPause

 05-21 14:37:03.155: D/FragmentDemo(7649):onStop

 05-21 14:37:03.155: D/FragmentDemo(7649):onDestroyView

 05-21 14:37:03.165: D/FragmentDemo(7649):onDestroy

05-21 14:37:03.165:D/FragmentDemo(7649): onDetach

如果替换或者删除一个fragment然后然用户可以导航到上一个fragment,必须在调用commit()方法之前调用addToBackStack()方法添加到回退栈,如果你把这个fragment添加到了回退站栈,在提交之后这个fragment会是被Stop而不是destroy,如果用户导航到这个fragment,这个fragment将会被Restart而不是重新创建,如果没有吧它添加到回退栈,则在删除或者替换的时候它被Destroyed。

与其他fragment之间的交互:

     两个单独的fragment之间是不应该进行通信的,应该使用他们所在的Activity作为沟通的纽带

     为了实现两个Fragment的交互,您可以在Fragment中定义一个接口,然后再这个接口中定义一个方法,在Fragment的onAttach()方法中调用这个接口中的方法。然后让Activity实现这个方法来完成Activity和Fragment之间的通信。

 

 

 

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

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

相关文章

关于人脸和指纹识别共同交流方案

尊敬的各位朋友,各位粉丝: 非常感谢各位能从博客看到关于人脸识别的文章给我的评论以及点赞,也有好多粉丝从博客中直接加我的QQ,找我要js和jar包,我也大部分都给了。还有的找我要源码!!&#xf…

这些BATJ必考的Java面试题,你都懂了吗?

转载自 这些BATJ必考的Java面试题,你都懂了吗? 题目一 请对比 Exception 和 Error,另外,运行时异常与一般异常有什么区别? 考点分析: 分析 Exception 和 Error 的区别,是从概念角度考察了…

计算机玩游戏特别卡,Win7电脑游戏卡顿怎么办 win7玩游戏卡如何解决

很多人都喜欢在win7系统中玩游戏,而在玩游戏的时候经常会碰到一些故障,比如有很多用户反映的游戏卡顿、玩游戏太卡,这让很多游戏玩家很是苦恼,那么Win7电脑游戏卡顿怎么办呢?下面给大家介绍一下win7玩游戏卡的解决方法…

在IIS上部署你的ASP.NET Core项目

概述 与ASP.NET时代不同,ASP.NET Core不再是由IIS工作进程(w3wp.exe)托管,而是使用自托管Web服务器(Kestrel)运行,IIS则是作为反向代理的角色转发请求到Kestrel不同端口的ASP.NET Core程序中&a…

2020蓝桥杯省赛---java---A---2(既分数组)

题目描述 代码实现 package TEST;public class Main {public static void main(String[] args) {int ans 0;for(int i1; i<2020; i)for(int j1; j<2020; j) // if(j>i){{if(gcd(i, j) 1) ans;} // }else { // if(gcd(i, j) …

第一章数据库系统基础

第一章数据库系统基础 一、数据库&#xff1a;存储数据的仓库 二、数据库能够做什么&#xff1a; 1.存储大量的数据&#xff0c;方便检索和访问。 2.保持数据的信息一致、完整 3.共享和安全 4.通过组合分析&#xff0c;产生新的有用信息。 三、应用程序和数据库的关系 应用程序…

微信消息提醒与消息数字提示之BadgeView

微信消息提醒与消息数字提示之BadgeView BadgeView 一个可以自由定制外观、支持拖拽消除的 MaterialDesign 风格 Android BadgeView。 GitHub地址&#xff1a;https://github.com/stefanjauker/BadgeView 代码&#xff1a; MainActivity&#xff1a; package com.example.jash.…

西安理工大学计算机专业毕业,西安理工大学什么专业好找工作?毕业工资大概多少?答案在这里...

文/圆梦志愿 马老师西安理工大学是中央与地方共建的省属高水平大学&#xff0c;在本省的知名度较高&#xff0c;是一所实力还不错的理工类高校。那么&#xff0c;西安理工大学就业最好的专业是哪些&#xff1f;学校毕业生的薪资水平如何呢&#xff1f;一起来了解一下吧。一、西…

这些排序算法的使用时机,你都知道吗?

转载自 这些排序算法的使用时机&#xff0c;你都知道吗&#xff1f; 概述 排序有内部排序和外部排序&#xff0c;内部排序是数据记录在内存中进行排序&#xff0c;而外部排序是因排序的数据很大&#xff0c;一次不能容纳全部的排序记录&#xff0c;在排序过程中需要访问外存…

第二章用表组织数据

第二章用表组织数据 一、数据库的完整性大多数是由设计的时候引起的。 二、可靠性准确性数据完整性 三、数据库的四种完整性约束&#xff1a; 1.实体完整性约束 2.域完整性约束 3.引用完整性约束 4.自定义完整性约束 四、数据库数据的数据类型&#xff1a; 1.char:字符类型&…

2020蓝桥杯省赛---java---A---7(回文日期)

题目描述 思路分析 暴力判断 代码实现 package lanqiao;import java.util.Scanner;public class Main {public static String str"";public static boolean isLeap(int year){return (year%40&&year%100!0)||year%4000;}public static boolean check(int …

小学计算机学情分析报告,小学信息技术_重点文字图说话教学设计学情分析教材分析课后反思...

教学设计一、导入师&#xff1a;为了弘扬传统文化&#xff0c;丰富校园生活&#xff0c;我们学校举办了一场“穿越千年&#xff0c;诗文校园”阅读推广活动。活动要求选取古诗、优美散文、自写文章进行艺术加工&#xff0c;最终遴选出十篇文章入驻学校宣传栏&#xff0c;进行推…

RecyclerView的使用

RecyclerView 1. 为什么叫RecyclerView&#xff1f; 1. 不关心Item是否显示在正确的位置&#xff0c;如何显示。 2. 不关心Item之间如何分隔 3. 不关注Item的增加与删除的动画效果 4. 仅仅关注如何回收与复用View 2. 需要引入的类 LayoutManage确定显示…

Spring Cloud 面试题

转载自 Spring Cloud 面试题 问题一&#xff1a; 什么是Spring Cloud&#xff1f; Spring cloud流应用程序启动器是基于Spring Boot的Spring集成应用程序&#xff0c;提供与外部系统的集成。Spring cloud Task&#xff0c;一个生命周期短暂的微服务框架&#xff0c;用于快…

第三章用sql语句操作数据

一、sql是什么&#xff1a; 1.结构化查询语言 2.在什么情况下使用&#xff1a; &#xff08;1&#xff09;对sqlserver执行所有操作的时候 &#xff08;2&#xff09;对程序进行增删改查的时候 3.sql组成&#xff1a; &#xff08;1&#xff09;DML数据操作语言&#xff0c;ins…

从真实项目中抠出来的设计模式——第二篇:过滤器模式

一&#xff1a;实际场景介绍 我们在给用户做订单催付通知的时候&#xff0c;会有这样的一种场景&#xff0c;用户在系统后台设置一组可以催付的规则&#xff0c;比如说订单金额大于xx元&#xff0c;非黑名单用户&#xff0c;来自 哪个地区&#xff0c;已购买过某个商品&#x…

2015蓝桥杯省赛---java---A---8(移动距离)

题目描述 思路分析 行号的差的绝对值列号的差的绝对值 代码实现 package lanqiao;import java.util.Scanner;public class Main {public static void main(String[] args) {int w0,m0,n0;Scanner scanner new Scanner(System.in);wscanner.nextInt();mscanner.nextInt();…

RecyclerView多布局的简单使用

RecyclerView多布局的简单 RecyclerView 是在Android5.0之后推出的&#xff0c;是一个比ListView更加灵活更加高效的适配器类型控件。但是RecyclerView不同于其他类型的适配器&#xff0c;它还需要一个LayoutManager进行页面控制展示。RecyclerView提供了三种布局管理器&#x…

Spring Boot 面试题

转载自 Spring Boot 面试题 问题一 什么是Spring Boot&#xff1f; 多年来&#xff0c;随着新功能的增加&#xff0c;spring变得越来越复杂。只需访问https://spring.io/projects页面&#xff0c;我们就会看到可以在我们的应用程序中使用的所有Spring项目的不同功能。如果必…

可以代表学计算机的标志,桌面上的图标可以用来表示

语音内容&#xff1a;大家好&#xff0c;我是时间财富网智能客服时间君&#xff0c;上述问题将由我为大家进行解答。以计算机为例&#xff0c;桌面上的图标可以用来表示文件、文件夹或快捷方式。“计算机”一般是指“电子计算机”&#xff0c;电子计算机(electronic computer)通…