如果我使用setArgs和getArgs将包从MyActivity传递给MyFragment的活动。我不能通过MyFragment构造函数传递数据对象吗?所有这些捆绑的东西是什么意思?它更快吗?
附带问题:当我绕过捆绑时,它们是否有别名?那么编辑包会改变一切吗?
答案 0 :(得分:0)
需要捆绑来管理片段的生命周期并允许操作系统再次创建对象。其他信息docs
答案 1 :(得分:0)
嗯,我认为这需要一些介绍:
如果活动或片段将是f.e.摧毁他们的状态将得救。因此,系统必须保存此状态才能重新创建它。最好的办法是将其保存为字节代码,其中包含重建定义此状态的对象所需的所有信息。通过使用字节代码,这个对象的类型并不重要。将对象转换为字节代码称为序列化。
Android拥有自己的名为Parcelable的序列化机制。它比默认的Java序列化要快得多,因此它应该是在Android中使用的首选方式。
现在Bundles只接受实现Parcelable或Serializable接口的对象和原语。它们用于保存在一个地方定义活动/碎片状态的不同对象。
因为您可以传递给Fragment的参数也将被系统序列化以供将来使用,因此需要Bundle。这就是为什么Fragment应该只使用非arg构造函数并通过参数传递参数的原因。
简而言之:系统使用Bundle来保存和重新创建活动或碎片的状态。因此,系统使用一种易于阅读的数据格式,即字节码。
答案 2 :(得分:-3)