Android 之 Fragment

一、Fragment的核心概念​

  1. ​定义与作用​

    Fragment是​​可重用的UI模块​​,代表Activity中的一部分界面。它拥有自己的布局、生命周期和事件处理逻辑,必须嵌入Activity或父Fragment中运行。

    • ​设计目的​​:

      • ​模块化​​:拆分复杂Activity为多个独立Fragment(如导航栏+内容区)。

      • ​复用性​​:同一Fragment可被多个Activity重用(如登录模块)。

      • ​响应式布局​​:自适应不同屏幕尺寸(平板左右分栏,手机底部导航)

     2​​与Activity的关系​

  • Fragment依赖Activity存在,通过FragmentManager管理生命周期。

  • ​通信机制​​:

    • Activity → Fragment:通过Bundle传递参数(setArguments())。

    • Fragment → Activity:定义接口回调(onAttach()中获取接口实例)

二、Fragment生命周期详解​

Fragment的生命周期包含11个回调方法,分为三个阶段:

  1. ​创建阶段​

    • onAttach():绑定到宿主Activity(获取Context引用)。

    • onCreate():初始化非UI资源(如数据加载)。

    • onCreateView():​​创建Fragment的UI布局​​(返回View对象)。

    • onViewCreated():视图创建后调用(绑定控件、设置监听)。

    • onActivityCreated():宿主Activity的onCreate()完成(可操作Activity视图)。

  2. ​运行阶段​

    • onStart():Fragment可见(启动动画/后台任务)。

    • onResume():获取用户焦点(注册广播/传感器)。

    • onPause():失去焦点(保存数据、释放资源)。

    • onStop():完全不可见(停止耗时操作)。

  3. ​销毁阶段​

    • onDestroyView():​​销毁视图​​(解绑控件引用,防止内存泄漏)。

    • onDestroy():清理资源。

    • onDetach():与Activity解绑(置空Context引用)

关键点​​:

  • 视图生命周期(onCreateView()onDestroyView())独立于Fragment对象生命周期。

  • 使用getViewLifecycleOwner()监听视图相关的LiveData

​三、核心应用场景​

  1. ​多屏适配​

    • 平板:单Activity + 左侧导航Fragment + 右侧内容Fragment。

    • 手机:底部导航栏切换不同Fragment(如微信首页)。

  2. ​动态UI​

    • 运行时替换Fragment(如点击按钮切换详情页)。

    • 支持动画过渡(FragmentTransaction.setCustomAnimations())。

  3. ​模块化设计​

    • 复用通用UI(如设置页面、评论组件)。

    • 结合ViewPager2实现滑动切换(如新闻分类)。

  4. ​导航管理​

    • 使用Jetpack ​​Navigation组件​​管理Fragment栈(NavController处理返回键)

四、使用方式与最佳实践​

  1. ​添加Fragment到Activity​

    • ​XML静态添加​​(简单场景)

<androidx.fragment.app.FragmentContainerView
    android:id="@+id/fragment_container"
    android:name="com.example.MyFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

​           2. 动态添加​​(灵活控制):

supportFragmentManager.commit {
    replace(R.id.fragment_container, MyFragment.newInstance())
    setReorderingAllowed(true)
    addToBackStack("detail") // 加入返回栈
}
  1. ​避免常见问题​

    • ​内存泄漏​​:

      • onDestroyView()中解绑控件和异步任务。

      • 避免在Fragment中持有Activity强引用(用WeakReference)。

    • ​状态丢失​​:

      • 使用onSaveInstanceState()保存临时数据。

    • ​嵌套过深​​:

      • getChildFragmentManager()管理子Fragment。

  2. ​架构建议​

    • ​单一职责​​:每个Fragment仅负责一个功能模块。

    • ​通信规范​​:

      • 使用ViewModel共享数据(替代直接Fragment间通信)。

      • 事件传递采用EventBusLiveData

五、与Activity的对比与选型​

​维度​

Activity

Fragment

​独立性​

可独立运行

必须嵌入Activity

​复用性​

低(界面与逻辑绑定)

高(模块化设计)

​界面灵活性​

适合全屏界面

适合局部动态更新

​生命周期管理​

复杂(需处理配置变更)

轻量(依赖宿主Activity)

总结​

  • ​核心价值​​:Fragment通过​​模块化、复用性和响应式设计​​,解决复杂UI的开发与适配问题。

  • ​必知实践​​:

    1. 生命周期区分​​视图销毁​​(onDestroyView())与​​对象销毁​​(onDestroy())。

    2. 使用FragmentContainerView替代<fragment>标签(避免状态管理问题)。

    3. 优先采用​​Navigation组件​​管理导航栈,简化返回逻辑

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值