Android中第五大组件详解
来源:互联网 发布:批量查询淘宝小号 编辑:程序博客网 时间:2024/05/02 00:50
Fragment概念
可能很多小伙伴看到这个Title会回我一句SB,不要紧,等诸位看完文章再说我是不是说的有一点点道理
众所周知,Android有四大组件,activity,broadcastReceiver,service,contentprovider。没错,可是我觉得Fragment的作用不亚于它们,因此自封为第五大组件。
那我们来看一看它产生的背景吧:
Android 在 Android 3.0(API 级别 11)中引入了片段,主要是为了给大屏幕(如平板电脑)上更加动态和灵活的 UI 设计提供支持。由于平板电脑的屏幕比手机屏幕大得多,因此可用于组合和交换 UI 组件的空间更大。利用片段实现此类设计时,您无需管理对视图层次结构的复杂更改。 通过将 Activity 布局分成片段,您可以在运行时修改 Activity 的外观,并在由 Activity 管理的返回栈中保留这些更改。
Fragment的出现为了处理大屏幕,它比较小巧,activity比较笨重,但是它必须寄存于activity,但它的生命周期很是符合activity,因此很多应用的开发都会使用到fragment,毕竟属于轻量级的组件麽。微信的界面就是使用fragment+viewpager+activity进行组合的,这个demo会在下一篇文章中给出。
Fragment的生命周期:
这里分为动态启动和静态启动两种来说
所谓的静态启动就是在xml文件中指定该fragment组件
创建一个类继承fragment,并且在onCreateview中加载布局:
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { Log.i(TAG, "Fragment---onCreateView: "); return inflater.inflate(R.layout.left_fragme_layout,container,false); }在activity的布局中定义该fragment的xml文件
<fragment android:layout_width="wrap_content" android:layout_height="match_parent" android:name="com.example.forget.csdndemo.LeftFragment"></fragment> <Button android:layout_width="match_parent" android:layout_height="match_parent" android:text="这里是activty的地盘"/>效果图如下:
执行的生命周期方法如下:
可以看出,若是静态加载会先创建出fragment的视图,之后由于fragment是依赖于activity存在的,它的出现都会晚于activty,销毁都会早于activity一步。(下图是点击回退栈 之后经历的生命周期,可以看出销毁时会早于activty的生命周期一步)
所谓的动态启动,就是通过代码启动fragment:
public void ck(View view) {// 获取fragment管理器 FragmentManager fm = getFragmentManager();// 使用事物,为了保证数据的一致性和完整性 FragmentTransaction ft = fm.beginTransaction();// 将需要添加的fragment创建出来 LeftFragment left = new LeftFragment();// 使用replace方式添加fragment ft.replace(R.id.fragment_contont,left);// 提交事物 ft.commit(); }
执行的生命周期方法如下:
(此时,由于activity已经处于可交互,因此直接从fragment的构造方法执行到Onresume,之后的生命周期和静态启动的相同)
关于fragment中add和replace方法的区别:
这里是使用replace方法不断的添加新的fragment,那么它相当于先执行remove方法,再执行add方法,生命周期如下:
使用add方式添加fragment会执行下面的生命周期方法:
使用add方法进行添加fragment不会进行销毁之前的fragment,在宿主activty销毁的时候,会依次进行销毁:
上图中的红线是第二次添加的fragment,黄线是第一次添加的fragment,若是点击回退栈退出activity的话,执行图中的生命周期,可见add方法是一直添加,而不会进行销毁fragment。若想添加到回退栈,只需要调用:fragmentTransaction.addToBackStack(null);
关于对fragment和activty之间的通信,在下一篇文章中会详细说道。
0 0
- Android中第五大组件详解
- android 4大组件详解
- Android开发4大组件详解
- Android中Service组件详解
- Android中Activity组件详解
- Android中ContentProvider组件详解
- Android中Intent组件详解
- Android中Intent组件详解 .
- Android中Intent组件详解
- Android中Service组件详解
- Android中ContentProvider组件详解
- Android中Intent组件详解
- Android中Intent组件详解
- Android中Service组件详解
- Android中Intent组件详解
- Android中Intent组件详解
- Android中四大组件详解
- Android中ContentProvider组件详解
- opencv -GUI接口介绍
- 字符串操作函数(使用,没有自己定义)
- Install Windows 10/7 without USB or DVD from Linux
- bug宝典之bootstrap switch Uncaught TypeError: Cannot read property 'apply' of undefined
- Android自定义View之刻度尺滑动功能(一)
- Android中第五大组件详解
- ArcGIS数据统计及字段计算
- IOS、swift学习笔记心得之初入mac,xcode,swift
- C语言写的链表
- 在Web.xml中自动扫描Spring的配置文件及resource时classpath*:与classpath:的区别
- linux下文件的三个时间
- 利用PHP来进行消息推送
- Oracle 常用的V$ 视图脚本
- 接口测试之用例设计技巧