Android 片段:空构造函数真的需要吗?

2024-01-10

我有一个带有寻呼机和 FragmentStatePagerAdapter 的活动(我需要跨多个页面滑动)。众所周知,这个适配器一次创建 3 个片段实例,一个是要显示的,一个是上一个,一个是下一个。

我的活动使用只有一个构造函数的片段运行得非常好:它接收了 1 个参数。测试时,我开始收到臭名昭著的消息:

Unable to instantiate fragment: make sure class name exists, is public, 
and has an empty constructor that is public 

有趣的是,此消息仅在方向更改后立即显示,但如果方向保持不变,该应用程序就会正常工作。所以,

  1. 为什么当方向没有改变时它会起作用?
  2. 为什么改变方向时会失败?
  3. 方向更改时的 Activity 和 Fragment 生命周期与刚创建的 Activity 有何区别?

多谢


真的需要空构造函数吗?

Yes.

为什么当方向没有改变时它会起作用?

因为 Android 不会尝试重新创建您的片段。

为什么改变方向时会失败?

因为 Android 正在重新创建您的片段。

当配置发生更改(例如,方向更改)时,默认情况下 Android 会销毁并重新创建您的 Activity,并且还会销毁并重新创建该 Activity 中的片段。 “重新创建片段”部分就是为什么您需要在片段上使用零参数公共构造函数。它也用于其他情况,例如FragmentStatePagerAdapter.

或者,引用文档 http://developer.android.com/reference/android/app/Fragment.html:

Fragment 的所有子类都必须包含一个公共的空构造函数。框架通常会在需要时重新实例化片段类,特别是在状态恢复期间,并且需要能够找到此构造函数来实例化它。如果空构造函数不可用,则在状态恢复期间某些情况下会发生运行时异常。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 片段:空构造函数真的需要吗? 的相关文章