标签:
Fragment和Activity有很多相似之处,例如可以不带UI,但这样做对两者似乎都没什么意义。他们的创建方式也很相似,例如下面的代码:
Fragment的生命周期和它的宿主Activity密切相关,几乎和宿主Activity的生命周期一致,他们之间最大的不同在于Activity可以增加或删除Fragment。下图总结了Fragment的生命周期:
每个Activity对象都内置了一个FragmentManager对象,使用getFragmentManager()即可获得:
FragmentManager fragmentManager = getFragmentManager();
在Activity中添加Fragment的最简单方法是使用layout配置文件,例如:
调用inflate方法生成Fragment的界面后,Fragment实际上是一个类似ViewGroup的角色,在Activity中管理自己的UI。
上面那种将Fragment添加到Activity的方法缺乏灵活性,不能实现动态地添加和删除,更好的方式是使用FragmentTranaction和类似下面这样的配置文件:
FragmentTransaction可以在运行时添加,删除或替换Fragment,从而实现UI的动态变化。Fragment Transaction由Fragment Manager的beginTransaction()方法创建,然后可以进行Fragment的添加,删除和替换,最后通过commit()方法提交修改。
使用FragmentTransaction的add方法可以添加一个新的Fragment,add()方法的主要参数是Fragment的容器View(或其ID)及Fragment实例,例如:
删除Fragment需要FragmentTransaction的remove()方法,参数为Fragment对象,Fragment对象可以通过FragmentManager的findFragmentById()方法获得。
替换Fragment使用的是FragmentTransaction的replace()方法,参数分别为所要替代Fragment所在容器的ID和新的Fragment:
有两种方法可以获取某个特定的Fragment,如果这个Fragment已经被添加到某个layout文件中,则可以使用xml文件中的id作为参数:
也可以通过创建Fragment时添加的tag获取特定的Fragment:
在配置文件中将visibility的属性设为"gone",即可删除某个Fragment,例如:
Activity拥有Activity Stack,从而在用户按”返回”按钮时,回到前一个Activity。Fragment也可以响应”返回”事件,方法是FragmentTransaction在commit之前调用addToBackStack()方法。这样,在用户按返回键后,Android会首先重现之前的UI布局。
原理和Activity类似,调用addToBackStack()后,Fragment会被push到back stack中,而不是销毁。
Fragment Transaction有两种方法实现动画效果,分别是:
Fragment可以通过getActivity()方法获得宿主Activity对象:
另一种常见的Fragment和Activity之间的交互方式是使用回调函数:
android FragmentTransaction.replace的用法介绍
标签:
原文地址:http://blog.csdn.net/love_xsq/article/details/45043929