一、Fragment:
Fragment 表示 Activity 中的行为或用户界面部分。可以将片段视为 Activity 的模块化组成部分,它具有自己的生命周期,能接收自己的输入事件,并且可以在 Activity 运行时添加或移除片段。其引入目的是在不同尺寸的设备中灵活的使用,如手机上,用列表和详情在两个Activity中使用,但在pad中可以使用左侧列表,右侧详情的activity。
生命周期:onAttach() -> onCreate() -> onCreateView() -> onActivityCreated() -> onStart() -> onRsume() -> onPause() -> onStop() -> onDestroyView() -> onDestroy() -> onDetach();
注意:有时候会在onDestroyView之后会重新onCreateView(),比如在FragmentPagerAdapter()中,保存当前的Fragment状态,但是不保存其试图,每次都要重新创建。
二、使用概述:
1)比较重要的生命周期:onCreateView():用以创建展示的View;
2)在layout中添加fragment;
<fragment android:name="com.example.ExampleFragment"
android:id="@+id/list"
android:layout_weight="1"
android:layout_width="0dp"
android:layout_height="match_parent" />
3)在代码中添加
FragmentManager fragmentManager = getFragmentManager();
FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction();
ExampleFragment fragment = new ExampleFragment();
fragmentTransaction.add(R.id.fragment_container, fragment);
fragmentTransaction.commit();
三、其他知识点
1.用无UI的Fragment保存状态,主要用于当activity被异常终结时,保存一些状态,比如运行一个子线程;
2.fragment事务提交时,如果使用addToBackStack方法,则会将该事务所有步骤添加到返回栈,按返回键会将他们一并撤销;
3.同Activity一样,Fragment也可以使用onSaveInstanceState()来保存状态,并在onCreate()、onCreateVIew()或onActivityCreated()恢复。
四、fragment与activity之间的通信
1.通过正常的setArguments()方法
2.在activity可以通过创建Fragment引用(或者findFragmentByTag()、findFragmentById()获得)来直接操作Fragment;
3.在fragment可以通过getActivity()获取到Activity,再向下转型为对应的Activity。
4.在Fragment中创建一个回调接口,之后宿主Activity会实现该接口,并且Fragment在onAttach()方法中注册(在哪注册也看需求)。
5.用事件总线框架,比如EventBus以及otto等。
6.按照官方文档所说,不应该让两个Fragment进行直接的通信,为了降低组件间的耦合,以便复用。此时采用4中的回调方法,通过Activity来实现间接的通信。例如:FragmentA点击列表,然后回调Activity中实现的接口,在回调中activity调用FragmentB的更新方法,实现Fragment间的通信。