gpt4 book ai didi

java - 扩展SupportMapFragment - 如何实例化新 fragment ?

转载 作者:行者123 更新时间:2023-12-01 13:30:37 25 4
gpt4 key购买 nike

MapFragment 的文档中和SupportMapFragment他们通过调用 newInstance() 创建一个新 fragment 而不是使用new SupportMapFragment()

我的应用程序项目扩展了SupportMapFragment ,我尝试调用MyMapFragment.newInstance()在我的 fragment 类上,导致 map 按预期显示,但没有覆盖我的方法,例如 onCreateView()onActivityCreated()被调用。我花了一段时间才尝试使用 new MyMapFragment() 实例化我的 fragment 。相反 - 瞧,我重写的方法开始被调用!

我没有覆盖newInstance()在我的类里面,事后看来,很明显 newInstance()返回 SupportMapFragment 的实例,不是我的扩展类的实例(废话!)。

但我的问题是 - 为什么有一个 newInstance()方法以及为什么文档使用它,而使用 new SupportMapFragment() 似乎也同样有效?使用其中之一有什么区别?我一直无法找到SupportMapFragment的源代码,所以...

最佳答案

在这种情况下,我相信 newInstance 方法只是空构造函数的静态工厂方法,因此没有任何效果(尽管没有可用的源代码,我们无法确定),即它可能是像这样:

public static SupportMapFragment newInstance() {
return new SupportMapFragment();
}

那么它为什么存在?

  • 为了与其他最有可能的 newInstance(GoogleMap) 方法保持一致
  • 理论上,该方法可以返回 SupportMapFragment 的子类,可能是针对设备或平台进行优化的子类
  • 如果需要设置任何参数(也许现在或将来)

由于最后一点,创建 fragment 时始终使用静态工厂通常是一个好习惯,将来可以修改为:

public static SupportMapFragment newInstance() {
SupportMapFragment fragment = new SupportMapFragment();
Bundle args = new Bundle();
args.putBoolean("secretOptionNotEnabledWithNormalConstructor", true);
fragment.setArguments(args);
return fragment;
}

关于java - 扩展SupportMapFragment - 如何实例化新 fragment ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21590786/

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