1、Fragment的创建
(1)尽量使用v4包中的Fragment
(2)必须重写onCreateView()方法,使用inflater,从xml布局文件加载一个布局并返回。
注意:
1)传递至onCreateView()的container参数是您的 Fragment 布局将插入到的父 ViewGroup(来自 Activity 的布局)。savedInstanceState参数是在恢复 Fragment 时,提供上一 Fragment 实例相关数据的Bundle(处理 Fragment 生命周期部分对恢复状态做了详细阐述)。
2)inflate(int resource,ViewGroup root, boolean attachToRoot)方法带有三个参数:
resource:您想要扩展的布局的资源 ID;
root:将作为扩展布局父项的ViewGroup。传递container对系统向扩展布局的根视图(由其所属的父视图指定)应用布局参数具有重要意义;
attachToRoot:指示是否应该在扩展期间将扩展布局附加至ViewGroup(第二个参数)的布尔值。(在本例中,其值为 false,因为系统已经将扩展布局插入container— 传递 true 值会在最终布局中创建一个多余的视图组。)
(3)传参
一般使用 Fragment,直接使用 new,如果有参数,直接在构造方法中传入。但这样会有问题,比如当屏幕方向发生变化,Fragment 中的数据就会丢失。原因是系统会重新构造一个新的 Fragment,调用的是无参的构造方法,因此你传入的数据都会丢失。
解决方案:使用 Fragment.setArguments(Bundle) 进行传参。因为 Bundle 会被保存下来,当重新构建 Fragment 时,Bundle 仍然有效。
2、Fragment与Activity生命周期对应关系
3、Fragment管理及其事务
(1)Fragment管理使用FragmentManager,可从Activity中调用getSupportFragmentManager() 来获取。
(2)Fragment事务使用FragmentTransaction来完成,调用add()、remove()和replace()等方法为给定事务设置您想要执行的所有更改。然后,要想将事务应用到 Activity,您必须调用commit()。
FragmentTransaction可以通过FragmentManager.beginTransaction()来获取。
4、与Activity之间通信
(1)简单的:Fragment可以通过getActivity()来访问Activity,Activity也可以通过findFragmentById()或Tag的方式访问Fragment,当然亦可以通过FragmentManager。
(2)重点:使用回调的方式
在某些情况下,您可能需要通过 Fragment 与 Activity 共享事件。执行此操作的一个好方法是,在 Fragment 内定义一个回调接口,并要求宿主 Activity 实现它。 当 Activity 通过该接口收到回调时,可以根据需要与布局中的其他 Fragment 共享这些信息。
步骤:
1)Fragment 创建回调接口,并保留一个引用 mCallBack
2)宿主 Activity 实现回调接口
3)通过 Fragment 的 onAttach(Activity activity) 方法实例化 mCallBack
4)在 Fragment 中触发响应事件时,调用接口方法,实现共享信息
以上所有均参考Android开发者--Fragment文档
网友评论