Fragmen的生命周期及简单通信
2016-04-01 22:53
537 查看
Fragments生命周期如图所示:
![](https://img-blog.csdn.net/20160401221953232)
Fragments在其生命周期中的回调方法与activity有很多相似的地方,但Fragment有一些额外的生命周期回调方法:
onAttach():当fragment被绑定到activity时调用(Activity会被传入)。
onCreateView():创建与fragment相关的视图体系时被调用。
onActivityCreated():当activity的onCreate()函数返回时被调用。
onDestroyView():当与fragment关联的视图体系正被移除时被调用。
onDetach():当fragment正与activity解除关联时被调用。
一般情况下,创建fragment至少要为其实现以下几个方法:
onCreate()
在创建fragment时系统会调用此方法。在实现代码中,你可以初始化想要在fragment中保持的那些必要组件,当fragment处于暂停或者停止状态之后可重新启用它们。
onCreateView()
在第一次为fragment绘制用户界面时系统会调用此方法。为fragment绘制用户界面,这个函数必须要返回所绘出的fragment的根View。如果fragment没有用户界面可以返回空。
onPause()
系统回调用该函数作为用户离开fragment的第一个预兆(尽管这并不总意味着fragment被销毁)。在当前用户会话结束之前,通常要在这里提交任何应该持久化的变化(因为用户可能不再返回)。
在生命周期方面,activity与fragment之间一个很重要的不同,就是在各自的后台栈中是如何存储的。当activity停止时,默认情况下,activity被安置在由系统管理的activity后台栈中(因此用户可以按BACK键回退导航,就像在Tasks和后台栈中讨论的那样)。但是,仅当你在一个事务被移除时,通过显式调用addToBackStack()请求保存的实例,该fragment才被置于由宿主activity管理的后台栈。
Activity与Fragment的通信
1. Activity管理Fragment
想要管理activity中的fragment,可以使用FragmentManager。可以通过在activity中调用getFragmentManager()获得。
在activity中使用fragment的一大特点是具有添加、删除、替换,和执行其它动作的能力,以响应用户的互动。代码如下:
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction f=fragmentManager.beginTransaction();
f.add(R.id.fragment_container, newFragment);
f.replace(R.id.fragment_container, newFragment);//添加fragment
f.addToBackStack(null);//将fragment提交到后台栈
f.commit();//提交事务
2. Fragment获得宿主Activity并向其传递信息
fragment可以通过getActivity()函数访问Activity。
在一些情况下,你可能需要fragment与activity共享事件。这样做的一个好方法是在fragment内部定义一个回调接口,并需要宿主activity实现它。为了确保宿主activity实现了这个接口,fragment A的onAttach()回调函数(当添加fragment到activity中时系统会调用它)通过作为参数传入onAttach()的activity的类型转换来实例化一个OnArticleSelectedListener实例。当activity通过接口接收到回调时,可以在必要时与布局中的其它fragment共享信息。
Fragments在其生命周期中的回调方法与activity有很多相似的地方,但Fragment有一些额外的生命周期回调方法:
onAttach():当fragment被绑定到activity时调用(Activity会被传入)。
onCreateView():创建与fragment相关的视图体系时被调用。
onActivityCreated():当activity的onCreate()函数返回时被调用。
onDestroyView():当与fragment关联的视图体系正被移除时被调用。
onDetach():当fragment正与activity解除关联时被调用。
一般情况下,创建fragment至少要为其实现以下几个方法:
onCreate()
在创建fragment时系统会调用此方法。在实现代码中,你可以初始化想要在fragment中保持的那些必要组件,当fragment处于暂停或者停止状态之后可重新启用它们。
onCreateView()
在第一次为fragment绘制用户界面时系统会调用此方法。为fragment绘制用户界面,这个函数必须要返回所绘出的fragment的根View。如果fragment没有用户界面可以返回空。
onPause()
系统回调用该函数作为用户离开fragment的第一个预兆(尽管这并不总意味着fragment被销毁)。在当前用户会话结束之前,通常要在这里提交任何应该持久化的变化(因为用户可能不再返回)。
在生命周期方面,activity与fragment之间一个很重要的不同,就是在各自的后台栈中是如何存储的。当activity停止时,默认情况下,activity被安置在由系统管理的activity后台栈中(因此用户可以按BACK键回退导航,就像在Tasks和后台栈中讨论的那样)。但是,仅当你在一个事务被移除时,通过显式调用addToBackStack()请求保存的实例,该fragment才被置于由宿主activity管理的后台栈。
Activity与Fragment的通信
1. Activity管理Fragment
想要管理activity中的fragment,可以使用FragmentManager。可以通过在activity中调用getFragmentManager()获得。
在activity中使用fragment的一大特点是具有添加、删除、替换,和执行其它动作的能力,以响应用户的互动。代码如下:
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction f=fragmentManager.beginTransaction();
f.add(R.id.fragment_container, newFragment);
f.replace(R.id.fragment_container, newFragment);//添加fragment
f.addToBackStack(null);//将fragment提交到后台栈
f.commit();//提交事务
2. Fragment获得宿主Activity并向其传递信息
fragment可以通过getActivity()函数访问Activity。
在一些情况下,你可能需要fragment与activity共享事件。这样做的一个好方法是在fragment内部定义一个回调接口,并需要宿主activity实现它。为了确保宿主activity实现了这个接口,fragment A的onAttach()回调函数(当添加fragment到activity中时系统会调用它)通过作为参数传入onAttach()的activity的类型转换来实例化一个OnArticleSelectedListener实例。当activity通过接口接收到回调时,可以在必要时与布局中的其它fragment共享信息。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories