Fragment详细解析

本文详细解析了Android中的Fragment,包括其定义、与Activity的关系、生命周期、动态与静态加载方式,以及Fragment与Activity之间的数据传递。Fragment是应用界面的模块化组件,依赖于Activity存在,用于支持灵活的界面设计和不同设备的适配。文章还详细阐述了Fragment的生命周期,并给出了不同场景下生命周期方法的调用情况。最后,介绍了如何在Activity中静态和动态地加载Fragment,以及双向传递数据的方法。
摘要由CSDN通过智能技术生成
1、Fragment定义

应用界面中可重复使用的一部分,可以理解为模块化的Activity。

1.1 与Activity的关系

1.Fragment不能独立存在,必须嵌入到Activity中;
2. 一个Activity可以运行多个Fragment;
3. Activity是屏幕的主题,而Fragment是Activity的一个组成元素;
4. Fragment有自己的生命周期,接受它自己的事件,并可以在Activity运行时被添加或删除;
5.Fragment的生命周期受Activity生命周期的影响。如Activity暂停时,它拥有的所有Fragment都会暂停。

2、Fragment作用

支持动态、灵活的界面设计

  1. Fragment从Android 3.0 后引入
  2. 在低版本Android 3.0 前使用Fragment,需要采用android-support-v4.jar兼容包
    Fragment的设计思想是解决不同分辨率的终端适配问题,例如:平板与手机。Activity是不可拆分的,Fragment可以灵活组合。
3、生命周期

每个Fragment实例都有自己的生命周期。当用户浏览且与应用进行交互时,Fragment片段将会在添加、删除、进入或退出屏幕时,会在生命周期的不同状态中转换。

3.1 生命周期图

Fragment生命周期,及与Activity生命周期对比
在这里插入图片描述
在这里插入图片描述

3.2 Fragment生命周期解析
  • 当一个Fragment被创建时,调用方法:

onAttach():当Fragment依附到Activity时调用的方法;
onCreate():当Fragment创建时调用的方法;
onCreateView():给Fragment加载布局时调用的方法;
onActivityCreated():当该Fragment依附的Activity创建时调用的方法。

  • 当这个fragment对用户可见的时候,调用方法

onStart():当Fragment启动时调用的方法;
onResume():当Fragment正在运行时调用的方法;

  • 当Fragment进入"后台模式"时,调用方法

onPause():当Fragment不在交互时调用的的方法;
onStop():当Fragment不再可见时调用的方法;

  • 当Fragment被销毁(或者持有它的activity被销毁)

onPause()
onStop()
onDestroyView():销毁Fragment布局时调用的方法;
onDestroy():当Fragment销毁时调用的方法;
onDetach():当Fragment完全脱离Activity时调用的方法。

  • 就像Activity一样,在以下状态中,可以使用Bundle对象保存一个Fragment对象

onCreate()
onCreateView()
onActivityCreated()

3.3 其他场景的调用
  • 屏幕灭掉

onPause() onSaveInstanceState() onStop()

  • 屏幕解锁

onStart() onResume()

  • 切换到其他Fragment

onPause() onStop() onDestroyView()

  • 切换回本身的Fragment

onCreateView() onActivityCreated() onStart() onResume()

  • 回到桌面

onPause() onSaveInstanceState() onStop()

  • 回到应用

onStart() onResume()

  • 退出应用

onPause() onStop() onDestroyView() onDestroy() onDetach()

4、Fragment加载
4.1 静态加载
  • 在Activity的Layout.xml布局文件中静态添加

activity_list_fragment.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <fragment
        android:id="@+id/fragmenttest"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:name="com.laoda.androdstudy.Fragment.fragmentTest"/>
    <fragment
        android:id="@+id/fragmenttest1"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:layout_centerInParent="true"
        android:name="com.laoda.androdstudy.Fragment.fragmentTest"/>
</RelativeLayout>
  • Fragment布局文件
    fragment_test.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/black">

    <TextView
        android:id="@+id/fragmentlist"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="fragmentlist"
        android:layout_centerInParent="true"
        android:textColor="#FFFFFF"
        
  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值