一、写在前面
如何理解Fragment?
- 可以把Fragment理解成一个迷你的活动,其同样拥有布局和生命周期
- 但Fragment不能脱离activity存在,Fragment是activity的一个组成元素,一个activity可以拥有多个Fragment
- Fragment的生命周期直接受所在的activity的影响
二、Fragment的生命周期
- onAttach:当Fragment与Activity发生关联时调用
- onCreateView:创建该Fragment的视图
- onActivityCreateed:当Activity的onCreate方法调用完时调用
- onDetach:Fragment与Activity关联被取消时调用
三、静态使用Fragment
1.什么是静态使用Fragment?能实现什么效果?
静态使用Fragment就相当于把Fragment当作一个普通控件,能够随意添加在任何一个activity的布局中,可以增加代码的复用性!
2.首先建立一个Fragment类
3.找到onCreateView重载方法
最好把inflater.inflate(R.layout.fragment_fragment1, container, false)
这句代码提取成全局变量,其中R.layout.fragment_fragment1就是自动生成的布局文件!
5.进入自动生成的布局文件来设置布局
6.为Fragment初始化控件和点击事件
注意:在Fragment里初始化控件跟Activity里有点不一样,需要用view.findViewById()
此时我们已经完成好了一个fragment前期准备,它已经可以当作一个普通控件添加到Activity中使用!
7.在Activity的布局文件中添加fragment
这里注意设置好fragment的id和name属性,name属性后面跟你的Fragment类的位置,这样一来我们就把4个fragment当作普通控件静态使用在了一个activity中!
效果展示:
二、动态使用Fragment
1.什么是动态使用Fragment?能实现什么效果?
我们可以在同一个activity的container中实现不同的Fragment的添加、替换、删除,进行fragment轮换显示
2.首先给要使用Fragment的Activity的布局中提供一个容器
可以通过代码实现Fragment在这个容器里面进行添加、替换、移除!
3.在活动的java代码中初始化Fragment
4.获取Fragment管家、开启Fragment事物
这里的主要方法:
- getSupportFragmentManager()用来获取Fragment管家
- manager.beginTransaction()用管家开启事物
- transaction.replace(容器的id,fragment对象)
5.FragmentTransaction可以进行的操作
- transaction.add() 添加指定的fragment
- transaction.remove() 移除指定的fragment
- transaction.replace() 替换容器当前显示的fragment(相当于add/remove的结合体)
- transaction.hide() 隐藏指定的fragment
- transaction.show() 显示指定的fragment
- transaction.detach() 会将view从UI中移除,和remove()不同,此时fragment的状态依然由FragmentManager维护
- transaction.attach() 重建view视图,附加到UI上并显示
- transaction.commit() 提交一个事物