文档章节

Fragment和Activity

博为峰教研组
 博为峰教研组
发布于 2017/01/12 19:53
字数 527
阅读 7
收藏 0

相信学习过Android的童鞋们都对Fragment和Activity非常熟悉了。这里我们就不准备论述Fragment和Activity的具体定义,用法以及概念。

理解两个之间的区别的时候,只需要了解一个问题,就是Fragment能做到的Activity可以做到吗?可以做到的话没有问题,不可以做到的话,为什么不可以呢?这个就是他们之间的区别。

首先我们先来看一下Fragment的生命周期。


 

我们再来看一下Activity的生命周期。


 

这个方面我们不必多说。接下来我们来看他们的异同点。

1.Fragment显的更加灵活。可以直接在XML文件中添加<fragment/>,Activity则不可以。

2.Fragment可以在一个界面上替换一部分界面,Activity不可以,做不到。

3.Fragment和Activity之间的通信(控件之间的相互操作)。

Fragment控制Fragment:得到一个Activity,然后通过这个Activity的getFragmentManager()获得该Fragment的实例。

Fragment控制Activity:每个Fragment都有一个getActivity()得到一个活动。MainActivity activity = getActivity();

Activity控制Fragment:XXXFragment fragment = getFragmentManager().findFragmentById();

Activity控制Activity:这个显然是通过Intent活动之间的通信完成。别忘了在被打开的活动中创建Intent和得到的Intent一起进行,写个静态的actionStrat()。

4.Fragment和Activity中控件的加载。

Fragment的载入是通过OnCraeateView的inflater.inflate()加载布局的,然后通过修改main.xml,在main.xml上增加注册fragment标签,然后通过android:name来载入你已经通过inflater加载的隐藏布局。

有几个关键点:Fragment是通过inflater加载View然后在main.xml中注册的道德。当然如果你可以在fragment中得到View那就可以通过View.findVewById()来操作fargment上的具体控件。

5.动态加载Fragment。

首先,监听你的按钮。

1) 创建待加载的fragment的实例。

2) 得到FragmentManger,在活动中可以直接调用getFragmnetManger()方法获得。

3) 调用Manager的BeginTransation()。

4) 用replace()改变不同的Fragment。

5) Commit事务。

6) 碎片的生命周期。

© 著作权归作者所有

博为峰教研组
粉丝 52
博文 1224
码字总数 479077
作品 0
黄浦
程序员
私信 提问

暂无文章

PHP计算两个经纬度地点之间的距离

/** * 求两个已知经纬度之间的距离,单位为米 * * @param lng1 $ ,lng2 经度 * @param lat1 $ ,lat2 纬度 * @return float 距离,单位米 * @author www.Alixixi.com */function get...

子枫Eric
18分钟前
13
0
Linux—day 4

ch2 需要掌握的命令 (1)cat -n 1.txt (2)more 1.txt (3)head -n 15 initial-setup-ks.cfg (4)tail -n 17 initial-setup-ks.cfg;tail -f initial-setup-ks.cfg (5)cat -n anaconda-ks.c......

呵呵暖茶
30分钟前
10
0
【Kubernetes社区之路】我的PR被抢了

2019年11月的某天,我无意间发现一个PR作者在自己的PR中抱怨自己的PR没被合入,而另一个比自己提交晚且内容几乎一样的PR则被合入了。 字里行间透露些许伤感外加无奈: 作为一名开源爱好者,我...

恋恋美食
37分钟前
16
0
阻塞队列

对于许多线程问题, 可以通过使用一个或多个队列以优雅且安全的方式将其形式化。生产者线程向队列插人元素, 消费者线程则取出它们。 使用队列, 可以安全地从一个线程向另 一个线程传递数据...

ytuan996
38分钟前
17
0
mysql docker 配置

安装   主机上的mysql服务是基于docker安装的,具体安装脚本如下: docker run --detach \--restart always \--publish 3306:3306 --name mysql \--volume /data/mysql/logs:/logs \-...

qwfys
42分钟前
16
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部