第四章内容主讲Fragment的用法
一、Fragment的简单用法(静态添加):
新建一个类,继承自Fragment,注意,这里可能会有两个不同包下的Fragment供你选择,一个是系统内置的android.app.Fragment,一个是support-v4库中的android.support.v4.app.Fragment,我们强烈建议使用support-v4库中的Fragment,因为它可以让Fragment在所有Android系统版本中保持功能一致性,比如说在Fragment中嵌套使用Fragment,这个功能是在Android4.2系统中才开始支持的。
使用<fragment>标签在布局中添加碎片,需要通过android:name属性来显式的指名要添加的碎片类名,注意一定要将类的包名也加上。
二、Fragment的简单用法(动态添加):
在布局中定义<FrameLayout>,id为left_layout,然后通过代码向FrameLayout中添加内容,从而实现动态添加。
三、Fragment中模拟返回栈:
四、Fragment之间的通信:
Activity调用Fragment中的方法,我们可以在Activity里面调用如下方法获取Fragment的实例对象,然后通过对象调用对应的方法。
Fragment调用Activity中的方法,我们可以通过getActivity()方法获取和当前Fragment相关联的Activity实例
Fragment和Fragment之间进行通信,从第一个Fragment得到相关联的Activity,然后根据这个Activity获取另一个Fragment的实例。
五、Fragment的生命周期:
Fragment一共有十一个生命周期回调方法:onAttach()-->onCreate()-->onCreateView()-->onActivityCreated()-->onStart()-->onResume()-->onPuase()-->onStop()-->onDestroyView()-->onDestroy()-->onDetach()
1.onAttach():当Fragment和Activity建立关联的时候调用
2.onCreateView():Fragment加载布局时调用
3.onActivityCreated():确保和Fragment关联的Activity一定创建完毕的时候调用
4.onDestroyView():当Fragment中的视图被移除的时候调用
5.onDetach():当Fragment和Activity解除关联的时候调用
注意,当fragment1替换了fragment2,此时fragment2进入了停止状态,执行了onPause()、onStop()和onDestroyView()方法,如果在替换的时候没有调用addToBackStack()方法,此时fragment2就会进入销毁状态,onDestroy()和onDetach()方法就会得到执行。此时按下返回键,fragment2执行了onActivityCreated()、onStart()和onResume()方法,如果使用了addToBackStack()方法,onCreate()和onCreateView()方法不会执行。另外,在Fragment中也可以通过onSaveInstanceState()方法保存数据,onCreate()、onCreateView()和onActivityCreated()这3个方法中都可以重新得到。
六、使用限定符加载不同布局:
一般,我们都把布局卸载res->layout文件夹下面,如果我们在res文件夹下面新建一个layout-large文件夹,这个large就是一个限定符,large设备就会自动加载layout-large文件夹下的布局(双页布局),而小屏幕的设备还是会加载layout文件夹下的布局
使用最小宽度限定符,最小宽度限定符允许我们对屏幕的宽度指定一个最小值(以dp为单位),以这个最小值为临界点,屏幕宽度大于这个值的设备就加载一个布局,屏幕宽度小于这个值的设备就加载另一个布局。比如我们在res目录下新建layout-sw600dp文件夹,当程序运行在屏幕宽度大于600dp的设备上时,会加载layout-sw600dp文件夹下的布局,当程序运行在屏幕宽度小于600dp的设备上时,会加载默认的layout文件夹中的布局