对于Fragment我们可以将它认为是activity中的模块,一个activity可以添加多个Fragment,而这些Fragment有自己的布局,有自己的生命周期,单独处理自己的输入,在activity运行时可以加载或者移除Fragment模块。
一:在activity中添加Fragment存在两种方式:
静态添加:
<fragment
android:id="@+id/left_fragment"
android:name="com.sunflower.LeftFragment"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:layout_weight="3" />
<fragment
android:id="@+id/right_fragment"
android:name="com.sunflower.RightFragment"
android:layout_width="match_parent"
android:layout_height="fill_parent"
android:layout_weight="1" />
动态添加:
FragmentManager manager = this.getSupportFragmentManager();
FragmentTransaction transaction = manager.beginTransaction();
RightFragment rightFragment = new RightFragment();
LeftFragment leftFragment = new LeftFragment(); transaction.add(R.id.left_layout, leftFragment, "leftFragment"); transaction.add(R.id.right_layout, rightFragment, "rightFragment");transaction.commit();
二:Fragment与activity相互获取
Fragment可以通过getActivity()方法来获取Activuty的实例,然后可以调用activity中的一些方法 比如:findViewById();
相似的,activity也可以通过getFragmentManager()获取fragment的引用从而调用fragment中的方法
三:Fragment与activity之间、或者fragment与fragment之间共享事件
比如:一个fragment A显示文章题目,Fragment B 显示文章内容
则 当一个文章被选中的时候,Fragment A必须通知 activity 然后activity 再通知Fragment B 这种情况下 需要在Fragment A中生命一个借口
public interface MyFragmentListener {
public void myFragmentListener(); }之后在包含Fragment A的activity 中实现这个接口 用覆写myFragment()方法将Fragment A 中发生的事通知 Fragment B
为了确保宿主activity 实现这个接口 Fragmeng A 的onAttach()方法中将传入的activity 强制转类型,实例化一个MyFragmentListener对象
四:Fragment的生命周期
宿主activity的生命周期直接影响到Fragment 的生命周期,比如activity生命周期的回调韩式调用时,所有在其中的Fragment的相同回调函数也会同时被调用
另外:Fragment还有一些额外的生命周期回调函数
onAttach()
当fragment和activity被关联时调用。
onCreateView()
当创建fragment的UI被初始化时调用。
onActivityCreated()
当activity的onCreate()方法返回时调用。
onDestroyView()
当fragment的UI被移除的时候调用。
onDetach()
当fragment和activity去关联时调用