Android开发(30) Fragment的使用

来源:互联网 发布:湖南大学的校园网域名 编辑:程序博客网 时间:2024/06/06 02:37

一 Fragment简介

Fragment是我们可以将Activity分成不同的组成部分,这些组成部分拥有自己的生命周期和UI

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


二 创建Fragment

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



三 Fragment生命周期

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

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



四  获取Fragment Manager

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

FragmentManager fragmentManager = getFragmentManager();


五 添加Fragment到Activity

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


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

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

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



六 使用FragmentTransaction

FragmentTransaction可以在运行时添加,删除或替换Fragment,从而实现UI的动态变化。
Fragment TransactionFragment ManagerbeginTransaction()方法创建,
然后可以进行Fragment的添加,删除和替换,最后通过commit()方法提交修改。


七 添加,删除和替换Fragment
使用FragmentTransactionadd方法可以添加一个新的Fragmentadd()方法的主要参数是Fragment的容器View(或其ID)及Fragment实例,例如:


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

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


八 获取指定的Fragment


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


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


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


十一 Fragment Transaction的动画效果

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 另一种常见的FragmentActivity之间的交互方式是使用回调函数:



十三 没有UI的Fragment

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



十四 常用的Fragment类

14.1 DiagFragment

14.2 ListFragment

14.3 webViewFragment






0 0
原创粉丝点击