【问题标题】:Why DialogFragment can't be an inner class?为什么 DialogFragment 不能是内部类?
【发布时间】:2012-07-19 18:25:52
【问题描述】:

如果我将 DialogFragment 声明为 inner 类,我会在 orientation change 上得到一个 InstantiationException,即重新创建实例时,表示没有公共构造函数,类不是t public 等。事实上一切都是public,默认构造函数就位。如果我只是将这个 DialogFragment 移动到一个单独的文件中 - 一切都会好起来的。我不是在寻找解决方法,我只是想了解为什么会发生这种情况。

【问题讨论】:

  • 我不完全确定,但我认为DialogFragments,如果在一个班级内,必须是static。不幸的是,我对此没有任何引用,只是我看到的每个工作示例都使用static 实现。从您昨天帖子的要点来看,我知道这不是一个可行的解决方案,但我相信情况就是如此。也许其他人可以对此有所了解......
  • 谢谢,埃里克。我只是想了解幕后发生了什么,为什么会这样。
  • 是的,我对 ViewPager 和 Fragment 类有完全相同的问题。

标签: android android-dialogfragment


【解决方案1】:

这似乎是 Java 中基于 Fragments 的创建和重新创建方式的限制。

似乎所有Fragments 在某些情况下都必须重新实例化[1],例如方向变化(我猜在初始化时,取决于Fragment 的创建方式)。这意味着它将从您的外部类外部重新实例化。但是,不能从外部类外部实例化非static 内部类。[2] 还有其他情况,Fragment 需要从类外部进行通信.[3]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-22
    • 2014-02-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-31
    相关资源
    最近更新 更多