个人笔记
- 必须嵌套在活动Activity中使用
- 同样有自己的生命周期
- 相当于迷你型活动
- 让程序更加合理和充分地利用大屏幕空间
简单用法:
- 新建fragment.xml文件+新建一个类extends自Fragment类或其子类
- 有两个不同包下的Fragment可以选择使用,一个是系统内置的android.app.Fragment,一个是support-v4库的,建议使用后者
- 在新建类中重写一下方法
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,Bundle savedInstanceState){
View view=inflater.inflate(R.layout.fagment.xml,container,false);//加载碎片布局文件
}
在acticity_main.xml中添加< fragment/>控件,并通过android:name属性指明要添加的碎片的类名.
动态添加碎片(程序运行时动态地添加碎片)
在MainActivity中添加如下方法
private void replaceFragment(Fragment fragment){
FragmentManager fragmentManager=getSupportFragmentManager();
FragmentTransaction transaction=fragmentManager.beginTransaction();
transaction.replace(R.id.right_layout,fragment);//用fragment替换R.id.right_layout
transaction.commit();
}
在碎片中添加模拟栈返回
private void replaceFragment(Fragment fragment){
FragmentManager fragmentManager=getSupportFragmentManager();
FragmentTransaction transaction=fragmentManager.beginTransaction();
transaction.replace(R.id.right_layout,fragment);//用fragment替换R.id.right_layout
transaction.addToBackStack();//多添加了这行
transaction.commit();
}
碎片和活动之间进行通信
FragmentManager提供了finFragmentById()的方法获取碎片
如下
RightFragment 是自己定义的Fragment类,R.id.right_fragment是<fragment/ >的id属性
RightFragment rightFragment=(RightFragment)getFragmentManager().findFragmentById(R.id.right_fragment);
碎片的生命周期
- 碎片总是依附于活动而存在的。
- 活动中有的回调函数,碎片中也几乎都有
以下是碎片附加的一些回调方法
- onAttach()当碎片和活动建立关联的时候调用
- onCreateView()为碎片创建视图(加载布局)时调用
- onActivityCreated()确保与碎片相关联的活动一定已经创建完毕的时候调用
- onDestroyView()移除碎片相关联的视图时
- onDetach()碎片和活动解除关联
动态加载布局的技巧
使用限定符: 1.small 2.normal 3.large 4.xlarge
layout/activity_main.xml单页模式(一个碎片)
layout-large/activity_main.xml双页模式(包含了两个碎片)
那些屏幕被认为是large的设备就睡自动加载layout-large/activity_main.xml,较小的则自动加载layout/activity_main.xml
使用最小宽度限定符(Smallest-width Qualifier)
layout-sw600dp文件夹下新建acticity_mainxml文件,表示当程序运行在屏幕大于600dp的设备上时调用该xml布局,小于的话则调用默认的layout/activity_main.xml