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,一经查实,立即删除!

相关文章

这些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) …

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

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

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

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

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 …

Spring Cloud 面试题

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

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

一&#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项目的不同功能。如果必…

Visual Studio 2017迎来F# 4.1

三月初发布的Visual Studio 2017&#xff0c;包含了F# 4.1和Visual F#工具的更新。F# 4.1带来了语言层面提升以及与C# 7的互操作能力&#xff0c;而那些Visual F#工具是支持Roslyn workspaces的首个版本。 正如上文提到的&#xff0c;F# 4.1带来了语言层面提升以及与C# 7的互操…

Spring 事务原理和使用

转载自 Spring 事务原理和使用 1.SpringTransactional的配置 步骤一、在Spring配置文件中引入命名空间 <beans xmlns"http://www.springframework.org/schema/beans"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xmlns:tx"http://www…

微软在.NET官网上线.NET 架构指南频道

微软在Visual Studio 2017 正式发布的时候也上线了一个参考应用https://github.com/dotnet/eShopOnContainers , 最近微软给这个参考应用写了完善的文档&#xff0c;放在.NET官网的.NET架构频道https://www.microsoft.com/net/architecture。 整个.NET 架构按照4个部分展开&am…

2015蓝桥杯省赛---java---B---10(生命之树)

题目描述 思路分析 dfs无根树变有根树 代码实现 package lanqiao;import java.util.Scanner;public class Main {//提升作用域public static int n;public static int[] w;//每个点的权重public static int[] ww;//每个点作为根节点时能得到的最大权和public static int[][…

wps工资表怎么用计算机,wps制作工资表的方法步骤图

wps是一款强大的日常办公软件&#xff0c;我们可以使用wps来制作工资表&#xff0c;想知道具体的操作吗?下面就让学习啦小编告诉你wps如何制作工资表&#xff0c;希望对大家有所帮助。wps制作工资表的方法第一节 建立与使用 WPS表格WPS Office 2007办公 软件中提供了一个名为 …

Java8面试题

转载自 Java8面试题 问题一&#xff1a; Java8支持函数编程是什么意思&#xff1f; 在Java 8之前&#xff0c;所有东西都是面向对象的。除了原语之外&#xff0c;java中的 所有内容都作为对象存在。对方法/函数的所有调用都是使用对象或类引用进行的。 方法/功能本身并不…

为什么转换到Visual Studio 2017如此 “容易”

与VS 2015相比&#xff0c;Visual Studio 2017在C 功能方面有重大的飞跃。我们希望升级到新版本后能让您的日常工作变得更轻松。 这篇文章主要介绍从Visual Studio 2015升级到2017的步骤。在这个版本中&#xff0c;我们团队使代码库移动到Visual Studio 2017非常容易。这里有四…