(学习参考书:第一行代码第2版)
碎片(fragment)是一种可以嵌入在活动中的UI片段,它能让程序更加合理和充分利用大屏幕的空间。碎片类似于活动,同样能包含布局,有自己的生命周期。
(1)碎片的简单用法
onCreateView
方法。android:name
显式指明要添加的碎片类名,要将包名也加上(2)动态添加碎片
碎片的真正强大之处在于它可以在程序运行时动态的添加到活动中。步骤如下:
getSupportFragmentManager()
方法得到。beginTransaction()
方法开启commit()
方法来完成(3)在碎片中模拟返回栈
如果在动态添加/更改碎片后想通过Back键返回上一个碎片,即实现类似返回栈的效果。可以这样实现:
FragmentTransaction中提供了一个addToBackStack()
方法,它可以用于将一个事务添加到返回栈中。
transaction.addToBackStack(null);
在事务提交前调用该方法,它可以接受一个名字用于描述返回栈的状态,一般传入null
即可。
(4)碎片和活动间的通信
虽然碎片都是嵌入在活动中显式,但是碎片和活动都是各自存在于一个独立的类当中的,它们之间没有明显的方式直接进行通信。
为了方便碎片和活动之间进行通信,FragmentManager提供了一个类似于findViewById()的方法,专门用于从布局文件中获取碎片的实例。代码如下:
MyFragment myFragment = (MyFragment) getSupportFragmentManager().findFragmentById(R.id.my_fragment);
(MyFragment是自定义的碎片类,my_fragment是碎片的布局文件。)
调用FragmentManager的findFragmentById()
方法就可以在活动中获得相应实例,然后轻松调用碎片里的方法。
同样的,在每个碎片中通过调用getActivity()
方法来得到和当前碎片相关的活动实例。
MainActivity activity = (MainActivity) getActivity();
当碎片需要使用Context对象时,也是使用该方法。
碎片与碎片间通信的方法就是通过中间活动实现。
运行状态:当一个碎片可见并且它所关联的活动处于运行状态,该碎片也处于运行状态。
暂停状态:当一个活动进入暂停状态,与它相关联的可见碎片也会进入到暂停状态
停止状态:当一个活动进入停止状态,与其相关联的碎片会进入到停止状态。或者FragmentTransaction的remove(),replace()方法将碎片从活动中移除,但如果在事务提交之前使用addToBackStack()方法,这时的碎片也会进入停止状态。进入停止状态的碎片对用户完全不可见,有可能被系统回收。
销毁状态:当一个活动进入销毁状态,与其相关联的碎片会进入到销毁状态。或者FragmentTransaction的remove(),replace()方法将碎片从活动中移除,但在事务提交之前并没有使用addToBackStack()方法,这时的碎片也会进入销毁状态。
Fragment类中提供了一系列的回调方法,以覆盖碎片生命周期的每个环节,活动中的回调方法碎片都有除此之外,碎片还有一部分附加的回调方法:
onAttach() 当碎片和活动建立联系时调用
onCreateView() 为碎片加载布局时调用
onActivityCreated() 确保与碎片相关联的活动一定已经创建完毕时调用
onDestoryView() 当与碎片关联的视图被移除的时候调用
onDetach() 当碎片和活动解除关系时调用
为了满足在不同尺寸和分辨率设备上加载布局的不同,需要使用限定符来决定设备加载的布局文件。Android常见的限定符:
使用方法:在res目录下新建布局文件夹layout-Qualifier
,这里的Qualifier对应上述的限定符,再在该文件夹下创建同名布局文件。
最小宽度限定符:在res目录下新建布局文件夹layout-swXXXdp
,当程序运行到屏幕宽度大于XXX的设备时,会默认加载该文件夹下的布局文件。程序运行到屏幕宽度小于XXX的设备时,会默认加载普通的布局文件。
一. RabbitMQ 简介 MQ全称为Message Queue, 消息队列(MQ)是一种应用程序对应用...
Linux 发行版的爱好者们又有全新的 Linux 可以体验了,日前一款名为 TeLOS 的 Li...
如果你想对使用手机,平板电脑和辅助技术的用户隐藏某些内容,而只对键盘用户显...
最近在和团队规划OKR目标的时候,我们讨论了很多问题,我先抛砖引玉,列举了一些...
ajax传送json格式数据,关键是指定contentType,data要是json格式 如果是restful...
Afrikaans:af Albanian:sq Basque:eu Belarusian:be Bulgarian:bg Catalan:ca Ch...
本文分享自华为云社区《 架构可视化支撑系统演进探索 》原文作者无名小溪。 随着...
今天给大家分享四个在实际开发中,比较实用的SQL Server脚本函数,希望对大家能...
Eval 计算一个表达式的值并返回结果。 语法:[result = ]eval_r(expression_r) e...
一、导读 本文主要介绍Redhat7.6系统安装oracle 12201版本RAC的一些坑以及避坑方...