Fragment重要知识点总结

背景

前面用到fragment实现过一个新闻app的首页,以及首页滑动选择4个选择栏分别是四个fragment,其中fragment知识点没有总结的比较细致,而且的话里面的内容部分并没有实现只是一个页面,所以这里补充一下知识点。

一、Fragment(碎片)

Fragment 是依赖于 Activity 的可复用 UI 组件,可动态组合页面,提升灵活性和内存效率。

1. 生命周期(重要)

Fragment 生命周期与 Activity 紧密关联,但包含更多细粒度方法,关键阶段及作用如下:

方法 调用时机 核心作用
onAttach() Fragment 与 Activity 关联时调用 获取 Activity 引用,初始化参数(通过getArguments(),不可再调用setArguments())。
onCreate() Fragment 初次创建时调用 初始化非 UI 数据(此时 Activity 可能未创建完成,不可依赖 Activity 资源)。
onCreateView() Fragment 构建 UI 视图时调用 通过inflater.inflate()加载布局,返回视图(核心 UI 初始化)。
onActivityCreated() Activity 的onCreate()完成后调用 可安全使用 Activity 资源(如获取 Activity 中的控件)。
onStart() Fragment 可见时调用(与 Activity 的onStart()同步) 启动 UI 交互相关资源(如动画、传感器)。
onResume() Fragment 前台可交互时调用(与 Activity 的onResume()同步) 准备用户交互(如注册点击监听)。
onPause() Fragment 失去焦点时调用(与 Activity 的onPause()同步) 保存临时数据,暂停耗时操作。
onStop() Fragment 不可见时调用(与 Activity 的onStop()同步) 释放非必要资源(如停止动画)。
onDestroyView() Fragment 视图销毁时调用 解绑视图资源(下次显示需重新创建视图)。
onDestroy() Fragment 销毁时调用 释放非视图资源(此时仍与 Activity 关联)。
onDetach() Fragment 与 Activity 解除关联时调用 最终资源释放,Fragment 完全脱离 Activity。

与 Activity 生命周期对比:Fragment 的生命周期依赖于 Activity,如 Activity 的onStart()触发 Fragment 的onStart(),但 Fragment 多了onAttach()onCreateView()等 UI 相关方法。

2. 基本用法

Fragment 加载方式分为静态加载动态加载,动态加载更灵活(实际开发首选)。

  • 静态加载

    1. 定义 Fragment 布局(如example_fragment.xml)。
    2. 自定义 Fragment 类,重写onCreateView()加载布局。
    3. 在 Activity 布局中通过``标签引用,指定android:name为 Fragment 全类名。
    <fragment
        android:id="@+id/fragment"
        android:name="com.example.ExampleFragment"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>
    
  • 动态加载(重要):

    1. Activity 布局中定义FrameLayout作为容器(占位符)。
    2. 通过FragmentManagerFragmentTransaction动态添加 / 替换 Fragment:
    // 步骤1:获取FragmentManager(若用v4包则用getSupportFragmentManager())
    FragmentManager fm = getFragmentManager();
    // 步骤2:开启事务
    FragmentTransaction transaction = fm.beginTransaction();
    // 步骤3:创建并添加Fragment到容器
    ExampleFragment fragment = new ExampleFragment();
    transaction.replace(R.id.fragment_container, fragment); // 替换容器中现有Fragment
    // 步骤4:提交事务
    transaction.commit();
    

FragmentTransaction 关键方法

  • add():添加 Fragment 到容器(不销毁现有 Fragment)。
  • replace():移除现有 Fragment 并添加新 Fragment(等效remove()+add())。
  • hide()/show():隐藏 / 显示 Fragment(不销毁视图,保留状态)。
  • addToBackStack(null):将事务加入回退栈(按返回键可恢复上一个 Fragment)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值