【问题标题】:Static vs Non-Static Fragments静态与非静态片段
【发布时间】:2016-10-25 18:20:39
【问题描述】:

我正在查看来自的片段文档 Google Android Fragments

我一直在使用由 Android Studio 创建的非静态 Fragments 例如:

public class FormsFragment extends Fragment

为什么 Google 的文档将它们声明为静态的?原因是什么?

public static class DetailsFragment extends Fragment 

【问题讨论】:

  • 顶级类声明中的关键字 static 没有任何意义。 stackoverflow.com/questions/7486012/static-classes-in-java
  • @RomanSamoylenko 那么在顶层声明它们是静态的有什么意义呢?他们只是想惹我们?
  • 当我尝试声明顶级类static 时,我收到编译器警告。所以要么你在文档中发现了一个错误,要么 sn-p 真的位于另一个类中......
  • 没错,顶级类不能是静态的,也不能是无意义的

标签: java android android-fragments static


【解决方案1】:

使用 Fragment,您必须遵循 Android 本身给出的合同。由于框架管理您的活动和片段生命周期,因此它需要能够创建这些类。这是通过公共默认构造函数完成的。还需要将类本身声明为 public。

因此,如果您将片段定义为“普通”类,则无需考虑其他任何内容。如果您将其定义为另一个类的内部类必须 也将其声明为静态。否则,该类将有一个带有外部类类型参数的隐式构造函数,因此没有公共默认构造函数来创建片段的新实例。

【讨论】:

  • 您能否提供一个嵌套片段的用例?我总是将它们用作顶级。
  • 生成的类没有区别。只是开发人员倾向于将其保存在与外部类相同的类文件中。
【解决方案2】:

您的问题似乎是按两种类型对片段进行分类。静态的和非静态的,其实不然,fragment 有StaticDynamic 两种。关键字 static 不代表这是一个静态的fragment。该关键字可能意味着该片段类是一个嵌套的内部类,只能访问顶级类(可能是一个活动)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-13
    • 1970-01-01
    • 2021-10-20
    • 2016-01-21
    • 1970-01-01
    相关资源
    最近更新 更多