Fragment知识概要
(1) Fragment可以作为Activity界面的一部分组成出现。
(2) 可以在一个Activity中同时出现多个Fragment,并且一个Fragment也可以在多个Activity中使用。
(3) 在Activity运行过程中,可以添加、移除和替换Fragemnt。
特点: Fragment是一个有生命周期的UI控件
Fragment的生命周期由Activity决定
Fragment的创建必须依赖Activity
优点: 适应PAD,充分利用屏幕资源
实现布局文件和JAVA代码的重用
静态加载
创建Fragment
1. 写一个类MyFragment继承Fragment
2. xml文件中使用<fragment>
在Activity的layout文件中声明Fragment,需要特别注意的是<fragment>中的android:name属性指定了在layout中实例化的Fragment类
标识Fragment的方法:
android:id属性提供一个唯一ID
android:tag属性提供一个唯一字符串
3. 在布局文件中写一个fragment.xml布局文件,内容自定义。
4. 在自定义MyFragment类中重写onCreateView()方法,并返回view
// layout布局文件转换成View对象
// resource:Fragment需要加载的布局文件
// root:加载layout的父ViewGroup
// attacthToRoot:false,不返回父ViewGroup
View view = inflater.infate(R.layout.fragment, container, false);
return view;
动态加载
1. 先在xml文件中,给Fragment创建一个占位,一般使用一个FramLayout
2. 在java代码中使用FragmentManager创建一个FragmentTransaction
3. 在FragmentTransation的begin和commit之间进行一系列的操作,一个事务只能commit一次
1 撰写代码将Fragment添加到一个Activity layout中
add():添加一个Fragment(指定要添加的fragment和插入View)
与此类似的还有remove()、替换()
2 处理Fragment事务
根据用户的交互情况,对Fragment进行添加、移除、替换以及执行其他动作,提交给Activity的每一套变化被称作事务。
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaciton beginTransaction = fragmentManager.beginTransaction();//beginTransaction.add(R.id.frame,fragment); 第一个参数:添加到哪个布局中
第二个参数:fragment的对象
//beginTransaction.commit();
然后提交给Activity,必须调用commit()方法
如果允许用户通过按下BACK按键回返到前一个Fragment状态,调用commit()之前可以加入addToBackStack()f方法。
FragmentTransaction的方法
- transaction.add() 往Activity中添加一个Fragment
- transaction.remove() 从Activity中移除一个Fragment,如果被移除的Fragment没有添加到回退栈,这个Fragment实例将会被销毁。
- transaction.replace() 使用另一个Fragment替换当前的,实际上就是remove()+add()的合体
- transaction.hide() 隐藏当前的Fragment,仅仅是设为不可见,并不会销毁
- transaction.show() 显示之前隐藏的Fragment
- transaction.detach() 会将view从UI中移除,和remove()不同,此时fragment的状态依然由FragmentManager维护
- transaction.attach() 重建view视图,附加到UI上并显示
- transatcion.commit() 提交一个事务
- fragment.isAdded() 判断一个Fragment是否已经被添加到事务中
Fragment传值
1 Bundle方式
fragment.setArgument(Bundle) 放值
fragment.getArgument() 获得Bundle 取值
2 Activity公共方式
在一个Activity中,声明一个公共方法,并返回相关数据
在Fragment中,通过getActivity()获取Fragment的归属Activity对象,将这个对象强制类型转换
Fragment生命周期
初始化阶段 --〉Activity onCreate
onAttach 与归属Activity建立连接
onCreate 初始化Fragment
onCreateView 创建Fragment的UI控件
onActivityCreated 归属Activity的onCreate方法执行完之后被调用
显示/隐藏
onStart onResume onPause onStop
销毁阶段 --〉Activity的onDestroy
onDestroyView 销毁Fragment的UI控件
onDestroy 销毁Fragment
onDetach