Fragment是一种可以嵌在Activity中的UI片段,它让程序能更加合理和充分地利用大屏幕空间,在平板上应用广泛。
新建一个Fragment类,继承Fragment,这里有两个不同包下的Fragment供你选择,一个是系统内置的android.app.Fragment,一个是support-v4库中的android.support.v4.app.Fragment,建议使用support-v4库中的Fragment,因为它可以让Fragment在所有的Android版本中保持功能一致性。我们并不需要在build.gradle文件中添加support-v4库的依赖,因为build.gradle已经添加了appcompat-v7库的依赖,这个库会将support-v4库也一起引入进来。
1.在布局文件中添加Fragment
在布局文件中使用<fragment>标签,通过android : name属性来指定要添加的fragment类名,注意要把类的包名也加上。
2.动态添加Fragment
动态添加Fragment分为5步:
a.创建待添加Fragment的实例。
b.获取FragmentManager,在活动中可以直接调用getSupportFragmentManager()方法得到。
c.开启一个事务,通过调用beginTransaction()方法开启。
d.向容器内添加或者替换fragment,一般使用replace()方法实现,需要传入容器的id和待添加的fragment实例。
e.提交事务,调用commit()方法来完成。
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();
transaction.replace(R.id.content_fragment,fragment);
transaction.commit();
3.addToBackStack()
在Activity中添加Fragment后,点击返回键将直接退出程序,为了能返回上一级的Activity或者Fragment,通过transation.addToBackStack(null),实现fragment的返回栈效果。使用addToBackStack(null)进行替换,被替换的Fragment不会被销毁,如果没有使用,则会被销毁。
4.在Fragment中与Activtiy通信
通过getActivity()来获取和当前fragment关联的Activity实例。MainActivtiy activity = (MainActivtiy)getActivtiy();
5.Fragment特有的生命周期
onAttach():当Fragment和Activtiy关联的时候调用。
onCreateView():加载布局的时候调用。
onActivityCreate():当与Fragment相关联的Activtiy创建完毕的时候调用。
onDestoryView():当与Fragment关联的布局被移除的时候调用。
onDetach():当Fragment和Activtiy接触关联的时候调用。
6.通过onSaveInstanceState()保持下来的数据可以再onCreate(),onCreateView()和onActivityCreated()这三个方法中得到。
7.动态加载布局
程序能够根据设备的分辨率或者屏幕的大小在运行时决定加载哪个布局,可以使用限定符和最小宽度限定符。