Android复习笔记(4)-fragment

1. 静态添加fragment
Android中的fragment类似于activity,但是依附于fragment,拥有自己的布局,通过新建fragment类继承fragment,然后实现oncreateView方法,来加载fragment内的布局,oncreateview方法接受三个参数,第一个参数是layoutinflater对象,我们通过调用layoutinflater的inflate方法将我们写的布局动态加载进来;第二个参数是viewgroup,具体意思不详,后面是作为inflate的方法的参数传入;第三个参数是我们的create方法中见过的参数,是一个bundle对象,用来存储当页面异常关闭的时候,我们的一些数据。
inflate方法重写了多个方法,这里选用的是三个参数的方法,第一个参数是我们的布局id,第二个参数就是我们上面的container,第三个参数是决定我们是否要把我们的加载的视图加载到主视图,第二个参数就是我们依附的视图,如果第三个参数选择了true,那么我们的视图就会覆盖之前加载的视图。
我们这里说的是静态的加载fragment到activity中,在我们activity的界面编辑处,添加fragment标签,然后设置界面的宽高和id属性,唯一一点,我们需要添加name属性,此处的name属性参数是我们之前自己写的继承于fragment的继承类,需要完整的包名。
在这里插入图片描述
这样,界面显示的时候,就是两个页面平分了整个布局。
2. 动态添加fragment
我们动态添加fragment需要依赖于我们之前了解的另外的布局-framelayout,这个布局会默认所有的控件都摆放在布局的左上角。我们更改下上面的布局,一个还是通过静态添加到activity布局中,另外添加一个framelayout布局。然后在我们的activity代码中动态添加界面。
动态添加界面主要分为5步:
(1)创建待添加的碎片实例;
(2)获取fragmentManager,在activity中可以直接通过调用getSuppertFragmentManager()方法得到;
(3)开启一个事务(beginTransaction),通过manager调用beginTransaction()方法开启;
(4)向容器内添加或者替换fragment,一般使用replace()方法实现,需要传入容器的id和待添加的fragment实例;
(5)提交事务,调用commit()方法来完成;
在这里插入图片描述
运行程序发现效果和我们直接添加一样,但是通过动态添加,我们就有了更大的灵活性,实现随意切换fragment的效果。
3. fragment和activity通信
虽然fragment依附于activity但是他们都拥有自己的布局,自己的Java类,那么有没有什么方式能让两者沟通呢,答案是有的,为了方便fragment和activity的沟通,fragmentManger提供了一个类似于findviewbyid的方法,专门从布局文件中获取fragment的实例:
在这里插入图片描述
通过这种方式,我们就在activity中拿到了fragment的实例,也就可以通过fragment拿到fragment的资源了,实现了activity和fragment的通信;
这是在activity中获取fragment,那么在fragment中获取啊activity呢,我们在每个fragment中,都可以调用getActivity()方法来得到和当前fragment相关联的activity实例:
在这里插入图片描述
有了上面的两种方式,我们就实现了fragment和activity的通信,通过这种方式,我们也可以实现fragment和fragment的通信。
4. 动态加载布局的技巧
有时候我们需要根据屏幕的分辨率和大小来决定加载哪个布局,或者说是加载一个布局还是两个布局,很多平板的页面采用的都是双页模式,因为平板的屏幕足够大,可以装下两页的内容,而手机正常的只是够显示一个。
所以我们可以借助判定符(qualifiers)来实现程序是使用双页模式还是单页模式。具体的使用就是在正常的布局文件中写手机显示的界面,采用单页模式,然后在res下新建layout—large文件夹,然后在这个文件夹下新建一个布局,和刚刚的布局名字一致,然后布局是双页布局,这里large就是限定符,那些屏幕被认为是large的设备就会自动加载layout-large文件夹下的布局,而小屏幕的设备则还是会加载layout文件夹下的布局。
我们常用的限定符还有以下:
在这里插入图片描述
我们使用最小最小宽度限定符的时候,允许我们对屏幕的宽度指定一个最小值(以dp为单位),然后以这个最小值为临界点,屏幕大于这个设备就加载一个布局(我们新建文件夹下的布局),屏幕宽度小于这个值的设备就加载另一个布局(原布局)。文件夹命名格式为layout-sw600dp,这里的布局的名字需要保持一致。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值