Android组件5——Fragment详解

228 阅读2分钟

1 Fragment为什么被称为第五大组件

1.1 Fragment为什么被称为第五大组件

起初,Android 在 Android 3.0(API 级别 11)中引入了Fragment,主要是为了给大屏幕(如平板电脑)上更加动态和灵活的 UI 设计提供支持。
Fragment使用频率高,Fragment的使用频率仅次于Activity,有的项目中Fragment使用频率比Activity还要高,并且Fragment有生命周期,可以像Activity一样灵活的进行处理。所以称它为**“Android第五大组件”**

1.2 Fragment加载到Activity的两种方式

假设已经创建了一个fragment为RightFragment
1)静态添加,在Activity的布局文件中添加Fragment

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <!-- 引用全类名 -->
    <fragment
        android:name="com.example.fragmenttest.RightFragment"
        android:id="@+id/left_fragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</LinearLayout>

2)动态添加,在Activity中添加fragment

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/right_layout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

</FrameLayout>
// MainActivity中代码引用
// 步骤一:添加一个FragmentTransaction的实例
FragmentManager fragmentManager = getSupportFragmentManager();
FragmentTransaction transaction = fragmentManager.beginTransaction();

// 步骤二:用add()方法加上Fragment的对象rightFragment
RightFragment rightFragment = new RightFragment();
transaction.add(R.id.right_layout, rightFragment);

// 步骤三:调用commit()方法使得FragmentTransaction的实例改变生效
transaction.commit();

1.3 FragmentPagerAdapter与FragmentStatePagerAdapter区别

FragmentStatePagerAdapter 对fragment进行完全的添加和删除操作,而FragmentPagerAdapter 则是对视图进行attach和detach。

FragmentStatePagerAdapter 适合大量页面,不断重建和销毁。
FragmentPagerAdapter 适合少量页面,常驻内存。

2 Fragment的生命周期

Fragment拥有自己的生命周期,但被其所在的Activity所在的生命周期所控制。

onAttach
Fragment和Activity建立关联的时候调用。
onCreate
初始化Fragment。可通过参数savedInstanceState获取之前保存的值。
onCreateView
Fragment加载布局时调用。加载布局和findViewById的操作通常在此函数内完成,但是不建议执行耗时的操作,比如读取数据库数据列表。
onActivityCreated
当Activity中的onCreate方法执行完后调用。
onStart
执行该方法时,Fragment由不可见变为可见状态。
onResume
执行该方法时,Fragment处于活动状态,用户可与之交互。
onPause
执行该方法时,Fragment处于暂停状态,但依然可见,用户不能与之交互。
onStop
执行该方法时,Fragment完全不可见
onDestroyView
Fragment中的布局被移除时调用。销毁与Fragment有关的视图,但未与Activity解除绑定,依然可以通过onCreateView方法重新创建视图。通常在ViewPager+Fragment的方式下会调用此方法。
onDestroy
销毁Fragment。通常按Back键退出或者Fragment被回收时调用此方法。
onDetach
Fragment和Activity解除关联的时候调用。在onDestroy方法之后调用。

3 Fragment之间的通信

1)在Fragment中调用Activity中的方法 getActivity
2)在Activity中调用Fragment中的方法 接口回调
3)在Fragment中调用Fragment中的方法findFragmentById

4 Fragment管理器:FragmentManager

Fragment的replace、add、remove方法

add 将Fragment的实例添加到Activity的最上层
remove 将Fragment的实例从Activity的队列中删除
replace 是将Activity的最上层替换成想要替换的Fragment

参考:
Fragment——一个被称为第五大组件的组件
Android"第五大组件"之Fragment