(Fragment五)Fragment的 setArguments 为什么是必须的?直接通过构造函数传参会有什么问题?

setArguments(Bundle) 是Fragment API设计中一个看似繁琐实则精妙的设定。它并非‘必须’在语法上,但却是保证Fragment在系统管理的生命周期事件中数据一致性和状态保存的唯一可靠方式。直接通过构造函数传参,会在配置变更等场景下引发严重问题。”


核心问题:系统重建Fragment时的机制

要理解为什么不能直接传参,必须首先理解Android系统在配置变更(如屏幕旋转) 或进程被杀死后恢复时,是如何重建Fragment的。

系统的重建行为:
  1. 当发生配置变更时,Activity及其内部的Fragment会被销毁。

  2. 系统会自动重新创建新的Activity和Fragment实例。

  3. 在重新创建Fragment时,系统只会调用默认的无参构造函数。它无法知道也不关心你自定义的带参构造函数。

下图清晰地展示了系统在配置变更后重建Fragment时,两种传参方式的根本差异:

两种方式的深度对比

让我们通过一个具体的场景来剖析这两种方式的不同命运。

场景:一个UserProfileFragment,需要接收一个userId来展示用户信息。

方式一:直接通过构造函数传参(错误示范)

kotlin


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值