Android初学之十一:Fragment

一、静态Fragment

1、新建一个项目后,在layout里面新建一个左侧碎片布局left_fragment和一个右侧碎片布局right_fragment.xml
在这里插入图片描述
在这里插入图片描述

二、接着新建一个LeftFragment.class,让它继承Fragment

在这里插入图片描述
同样的方法在新建一个RightFragment.class
在这里插入图片描述

三、接下来直接修改activity_main.xml的代码

使用了标签在布局中添加碎片,需要通过android:name属性来显示指明要添加的碎片类名。注意要将类的包名加上

在这里插入图片描述

四、动态添加碎片

1、在上面的代码继续完善,新建另一个碎片anothor_right_fragment.xml
在这里插入图片描述
2、新建一个AnothorRightFragment.class
在这里插入图片描述
3、在activity_main.xml将上面的右侧碎片替换成FramLayout
在这里插入图片描述
4、修改MainActivity代码,构建replaceFragment()方法
在这里插入图片描述

五、在碎片中模拟返回栈

在上面我们已经成功的动态添加碎片,按选Back键发现会直接退出程序,那么我们样回到上一个碎片呢?

很简单,FragmentTrasaction中提供了一个addToBackStack()方法,可以用于将一个事务添加到返回栈中,修改MainActivity代码,就在replaceFragment()方法里添加一句代码,已标注红色

在这里插入图片描述

六、碎片和活动之间的通信

碎片和活动都是存在一个单独的类当中,如果想在活动中调用碎片里的方法,或者在碎片中调用活动里的方法,应该如何实现?

为了方便碎片和活动之间的通信,FragmentManager提供了一个类似于findViewById()的方法,专门用于从布局文件中获取碎片的实例,代码如下
RightFragment rightment = (RightFragment) getSupportFragmentManager().findFragmentById(R.id.right_fragment);
调用FragmentManager的findFragmentById()方法,可以在活动中得到相应碎片的实例,就能够轻松的调用碎片里的方法。

那碎片中又该怎样调用活动里的方法呢?

其实更简单了,在每个碎片中都可以通过调用getActivity()方法得到和当前碎片相关的活动实例,代码如下所示:
MainActivity activity = (MainActivity) getActivity();

七、动态加载布局的技巧:使用限定符

使用平板可以双页查看,左边子项,右边是相对应内容,但是手机是单页模式,子项和内容需要分开显示;那么怎样才能在运行时判断程序应该是使用双页模式还是单页模式?这就是需要借助限定符(Qualifiers)来实现了,修改上面的activity_main.xml文件
在这里插入图片描述
接着在res目录下新建layout-large文件夹,在这个文件夹新建一个布局,也叫作activity_main.xml
在这里插入图片描述
layout/activity_main布局只包含了一个碎片,即单页模式,而layou-large/activity布局包含了两个碎片,即双页模式,其中large就是一个限定符,那么屏幕被认为是larger的设备就会自动加载layout-large文件夹下的布局,而小的屏幕设备则还是会加载layou文件夹下的布局
然后将MainActivity中replaceFragment()方法里的代码注释掉,并在平板模拟器上重新运行程序。
Android常用的限定符,这里借用博主小七的笔记文章

八、使用最小宽度限定符

问题:large到底是指多大,有的时候我们希望可以更灵活地为不同设备加载布局,不管它们是不是被系统认定为large,这时就可以使用最小宽度限定符(Smallest-width Qualifier)了

最小宽度限定符允许我们对屏幕的宽度指定一个最小值(以dp为单位),然后以这个最小值为临界点,屏幕宽度大于这个值的设备就加载一个布局,屏幕宽度小于这个值的设备就加载另一个布局。
在res目录下新建layout-sw600dp文件夹,然后在这个文件夹新建activity_main.xml布局,代码如下所示:
在这里插入图片描述

这就意味着,当程序运行在屏幕大于等于600dp的设备上时,会加载layout-sw600dp/activity_main布局,当程序运行在屏幕宽度小于600dp的设备上时,则仍然加载默认的layout/activity_main布局

根据郭霖大神《第一行代码》学习,敬礼!

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值