setArguments(Bundle)是Fragment API设计中一个看似繁琐实则精妙的设定。它并非‘必须’在语法上,但却是保证Fragment在系统管理的生命周期事件中数据一致性和状态保存的唯一可靠方式。直接通过构造函数传参,会在配置变更等场景下引发严重问题。”
核心问题:系统重建Fragment时的机制
要理解为什么不能直接传参,必须首先理解Android系统在配置变更(如屏幕旋转) 或进程被杀死后恢复时,是如何重建Fragment的。
系统的重建行为:
-
当发生配置变更时,Activity及其内部的Fragment会被销毁。
-
系统会自动重新创建新的Activity和Fragment实例。
-
在重新创建Fragment时,系统只会调用默认的无参构造函数。它无法知道也不关心你自定义的带参构造函数。
下图清晰地展示了系统在配置变更后重建Fragment时,两种传参方式的根本差异:

两种方式的深度对比
让我们通过一个具体的场景来剖析这两种方式的不同命运。
场景:一个UserProfileFragment,需要接收一个userId来展示用户信息。
方式一:直接通过构造函数传参(错误示范)
kotlin

Fragment的 setArguments 为什么是必须的?直接通过构造函数传参会有什么问题?&spm=1001.2101.3001.5002&articleId=155160759&d=1&t=3&u=345395a54e804ed7ba7495812acfbfce)
1万+

被折叠的 条评论
为什么被折叠?



