Flagment介绍
背景介绍
Flagment中文名是碎片,意思是Activity中一个行为或用户界面的一部分。你可以在一个单一的Activity中组合使用多个碎片以建立一个多窗格的UI,并且可以在多个活动中重用一个碎片。Flagment是一个拥有独立生命周期、能够独立接受输入事件、并且可以在活动运行时添加或移除的碎片作为一个活动的模块化部分
一个碎片必须总是嵌入到一个活动(activity)中,并且它的生命周期直接受到Activity的生命周期的影响。例如:当活动暂停或销毁时时,它里边的所有碎片也是如此。然而,当一个活动运行时(OnResume)你可以单独的操作每个碎片,例如添加或移除它们。Activity提供了一个类似堆栈的类FlagmentTransaction来管理一个Activity中所有的Flagment,用户添加/删除操作都会加入这个后台堆栈,同时返回按钮可以回退到上一个Flagment。
使用背景
Flagment是在3.0的API中引入的,主要目的的为了在大屏幕的手机上可以更灵活的UI设计。使用Flagment比单纯用View来控制一个页面的显示,会更加灵活,同时自己的堆栈管理机制,也能更有效的管理内存。官网提供的展示图可以直观看到Flagment的使用。
<!--[endif]-->
使用Flagment.
<!--[if !supportLists]-->1. <!--[endif]-->Flagments的生命周期。首先要像Activity一样先了解Flagments的生命周期,如下图所示:
<!--[endif]-->
<!--[if !supportLists]-->2. <!--[endif]-->添加Flagment到Activity中。 有两种方法:
<!--[if !supportLists]-->A. <!--[endif]-->继承Flagment,在Layout中声明
(代码来自官网:http://developer.android.com/guide/components/fragments.html)
<!--[endif]-->
<!--[endif]-->
B.使用代码在Activity中添加。
ExampleFragment fragment =newExampleFragment(); fragmentTransaction.add(R.id.fragment_container,fragme; fragmentTransaction.commit();
写法有点像数据库的事务管理。
<!--[if !supportLists]-->3. <!--[endif]-->Flagments的管理:
Android提供了一个FlagmentManager类来管理,提供了以下方法:
findFragmentById()获取你Activity存在的Fragment
popBackStack()把Fragment从返回栈中弹出
addOnBackStackChangedListener返回栈的变化注册监听器.
……..还有其他的可以查看官网文档。
<!--[if !supportLists]-->4. <!--[endif]-->执行Flagment的事务(FragmentTransaction):
进行对Fragment的添加,移除,替换等等其他操作。Flagments提交给Activity的每个变化称为一个事务。你可以使用像add(),remove(),replace()这样的方法来为一个事务设定你想要执行的操作.,最好别玩了执行commit()方法。
//创建一个新的Fragmen和事务
Fragment newFragment = new ExampleFragment();
FragmentTransaction transaction = getFragmentManager().beginTransaction();
//使用这个Fragment替换在Fragmen容器中的Fragmet
transaction.replace(R.id.fragment_container, newFragment);
//添加这个事务到返回栈
transaction.addToBackStack(null);
// Commit the transaction
transaction.commit();
addToBackStack():如果没有调用addToBackStack()方法,那么这个fragment将会在事务提交后被摧毁,了调用addToBackStack()方法,那这个fragment会被停止并加入堆栈,并可以在用户按返回的时候恢复。
<!--[if !supportLists]-->5. <!--[endif]-->Flagment 与Activity交互
<!--[if !supportLists]-->A. <!--[endif]-->getActivity(),Flagments中调用Activity
B.findFragmentById()/findFragmentByTag() 通过FragmentManager Activity可以获取一个对这个Fragment的引用。
6. Flagment 与Flagment之间的交互。
通常做法是:在FragmentA中定义一个回调接口然后让Activity实现它.当Activity通过接口接收到调用时,把数据/操作共享与Flagment B。
总结:Flagment 估计会是以后Android开发中非常经常用到的,而且随着Android 4.0的机器越来越多,使用Flagment 来开发的也会越来越多,尽早掌握和使用,是对每个开发人员的要求。
本文参考了:
http://developer.android.com/guide/components/fragments.html.