我有一个带有寻呼机和FragmentStatePagerAdapter的活动(我需要在许多页面上滑动)。我们都知道,这个适配器一次创建3个片段实例,要显示的实例、前一个实例和下一个实例。
我的活动非常好,使用了一个只有一个构造函数的片段:它接收了一个参数。在测试时,我开始收到一条臭名昭著的消息:
Unable to instantiate fragment: make sure class name exists, is public,
and has an empty constructor that is public
有趣的是,这条信息只有在方向改变后才会显示出来,但是如果定位保持不变,应用程序就会工作。所以,
非常感谢
发布于 2014-09-22 14:37:26
是否真的需要空构造函数?
是。
为什么它在方向不变的时候起作用呢?
因为Android并不是想重新创建你的碎片。
为什么当方向改变时,它就失败了?
因为Android正在重建你的碎片。
当发生配置更改(例如,方向更改)时,默认情况下,Android会破坏和重新创建您的活动,还会破坏和重新创建该活动中的片段。“重新创建片段”部分是为什么需要在片段上使用零参数公共构造函数的原因。它也在其他情况下使用,例如与FragmentStatePagerAdapter
。
或者,引用the documentation的话
所有片段的子类都必须包含一个公共的空构造函数。当需要时,框架通常会重新实例化一个片段类,特别是在状态恢复期间,并且需要能够找到这个构造函数来实例化它。如果空构造函数不可用,在某些情况下,在状态恢复期间会出现运行时异常。
https://stackoverflow.com/questions/25984054
复制相似问题