一 Fragment简介


Activity分成不同的组成部分,这些组成部分拥有自己的生命周期和UI。

它的最大用途在于适配不同的屏幕。

创建Fragment



和Activity有很多相似之处,例如可以不带UI,但这样做对两者似乎都没什么意义。他们的创建方式也很相似,例如下面的代码:

android frem层开发 android fragmentmanager_配置文件


三 Fragment生命周期

Fragment的生命周期和它的宿主Activity密切相关,几乎和宿主Activity的生命周期一致,

他们之间最大的不同在于Activity可以增加或删除Fragment。下图总结了Fragment的生命周期:

android frem层开发 android fragmentmanager_配置文件_02


四  获取Fragment Manager

Activity对象都内置了一个FragmentManager对象,使用getFragmentManager()即可获得:

FragmentManager fragmentManager = getFragmentManager();

五 添加Fragment到Activity中

在Activity中添加Fragment的最简单方法是使用layout配置文件,例如:

android frem层开发 android fragmentmanager_配置文件_03

调用inflate方法生成Fragment的界面后,Fragment实际上是一个类似ViewGroup的角色,在Activity中管理自己的UI。

上面那种将Fragment添加到Activity的方法缺乏灵活性,不能实现动态地添加和删除,

更好的方式是使用FragmentTranaction和类似下面这样的配置文件:



android frem层开发 android fragmentmanager_android开发_04



六 使用FragmentTransaction



FragmentTransaction可以在运行时添加,删除或替换Fragment,从而实现UI的动态变化。



Fragment Transaction由Fragment Manager的beginTransaction()方法创建,



然后可以进行Fragment的添加,删除和替换,最后通过commit()方法提交修改。




android frem层开发 android fragmentmanager_android frem层开发_05




Fragment


使用FragmentTransaction的add方法可以添加一个新的Fragment,add()方法的主要参数是Fragment的容器View(或其ID)及Fragment实例,例如:


android frem层开发 android fragmentmanager_android开发_06




删除Fragment需要FragmentTransaction的remove()方法,参数为Fragment对象,Fragment对象可以通过FragmentManager的findFragmentById()方法获得。


android frem层开发 android fragmentmanager_配置文件_07


替换Fragment使用的是FragmentTransaction的replace()方法,参数分别为所要替代Fragment所在容器的ID和新的Fragment:


android frem层开发 android fragmentmanager_android frem层开发_08




八  获取指定的 Fragment


android frem层开发 android fragmentmanager_android开发_09




删除 Fragment 容器


在配置文件中将visibility的属性设为"gone",即可删除某个Fragment,例如:


android frem层开发 android fragmentmanager_android frem层开发_10




Fragment和 Back Stack


Activity拥有Activity Stack,从而在用户按”返回”按钮时,回到前一个Activity。Fragment也可以响应”返回”事件,方法是FragmentTransaction在commit之前调用addToBackStack()方法。这样,在用户按返回键后,Android会首先重现之前的UI布局。


android frem层开发 android fragmentmanager_配置文件_11




原理和Activity类似,调用addToBackStack()后,Fragment会被push到back stack中,而不是销毁。

Fragment Transaction的动画效果

有两种方法实现动画效果,分别是

11.1  设置渐进:      transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);


11.2  设置动画效果:

  fragmentTransaction.setCustomAnimations(R.animator.slide_in_left, R.animator.slide_out_right); 


十二 Fragment和宿主Activity之间的接口


12.1  Fragment可以通过getActivity()方法获得宿主Activity对象:


  TextView textView = (TextView)getActivity().findViewById(R.id.textview); 


12.2 另一种常见的Fragment和Activity之间的交互方式是使用回调函数:

android frem层开发 android fragmentmanager_UI_12


十三 没有UI的Fragment

尽管不常见,但Fragment的确是可以没有UI的,好处也许是拥有了更灵活的生命周期控制。没有UI的Fragment生命周期事件有这些:


android frem层开发 android fragmentmanager_android开发_13

十四 常用的Fragment类

14.1 DiagFragment

14.2 ListFragment

14.3 webViewFragment