Fragment 是android 3.0引入的新API,是作为Activity的子模块,必须嵌入Activity才能使用。
Activity 与 Fragment的关系:
一、依附性:
1. Fragment 必须依附于Activity 。
2.Activity 内可以包含多个Fragment,Fragment也可被多个Activity复用。
3.Activity 暂停/销毁则其内的所有Fragment都暂停/销毁 (依附性)。
4.Fragment可以响应自己的输入事件,并拥有自己的生命周期,但受其依附的Activity影响。
5.Fragment 可调用getActivity()获得所在的Activity
6.Activity 可调用FragmentManager的add()、remove()、replace()方法动态的添加、移除、替换Fragment。
二、创建Fragment:
1、继承Fragment或其子类。
2、重写相关回调方法。
3、掌握Fragment的生命周期,实现业务需求。
4、添加Fragment(XML布局中添加Fragment 或动态加载):
动态加载的方法:
撰写代码将fragment添加到一个已存在的ViewGroup. 当activity运行的任何时候,
都可以将fragment添加到activity layout.只需简单的指定一个需要放置fragment的ViewGroup.
为了在你的 activity中操作fragment事务(例如添加,移除,或代替一个fragment),
必须使用来自FragmentTransaction 的API.
可以按如下方法,从你的Activity取得一个 FragmentTransaction 的实例:
1 |
FragmentManager fragmentManager =getFragmentManager(); |
2 |
FragmentTransaction fragmentTransaction =fragmentManager.beginTransaction(); |
然后你可以使用 add() 方法添加一个fragment,
指定要添加的fragment和要插入的view.
1 |
ExampleFragment fragment = newExampleFragment(); |
2 |
fragmentTransaction.add(R.id.fragment_container,fragment); |
3 |
fragmentTransaction.commit(); |
add()的第一个参数是fragment要放入的ViewGroup,
由resource ID指定,第二个参数是需要添加的fragment.
一旦用FragmentTransaction做了改变,为了使改变生效,必须调用commit().
生命周期图:
三、实践心得:
1. 重写回调函数时, 某些回调函数需要调用父类的回调函数。如:
public void onDetach() {
super.onDetach();
Log.i("tag", "called onDetach...");
}
需要调用父类的回调函数,完成相关的操作,否则出错!
2. Fragment与Activity需要通讯时,可在 fragment中定义一个回调的interface,
并要求宿主activity实现它.当activity通过interface接收到一个回调,
必要时它可以和在layout中的其他fragment分享信息.