gpt4 book ai didi

安卓 fragment : is empty constructor really required?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:58:15 27 4
gpt4 key购买 nike

我有一个带有寻呼机和 FragmentStatePagerAdapter 的 Activity (我需要在许多页面上滑动)。众所周知,这个adapter一次创建了3个fragment实例,要显示的一个,上一个和下一个。

我的 Activity 使用只有一个构造函数的 fragment 非常好:它接收 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 有何不同?

非常感谢

最佳答案

is empty constructor really required?

是的。

Why does it work when orientation does not change?

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

Why does it fail when orientation is changed?

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

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

或者,引用 the documentation :

All subclasses of Fragment must include a public empty constructor. The framework will often re-instantiate a fragment class when needed, in particular during state restore, and needs to be able to find this constructor to instantiate it. If the empty constructor is not available, a runtime exception will occur in some cases during state restore.

关于安卓 fragment : is empty constructor really required?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25984054/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com