在MapFragment
和SupportMapFragment
的文档中,他们通过调用newInstance()
而不是使用new SupportMapFragment()
来创建新片段。
我的应用项目扩展了SupportMapFragment
,我尝试在我的片段类上调用MyMapFragment.newInstance()
,导致地图按预期显示,但没有我的重写方法,例如onCreateView()
和onActivityCreated()
正在被召唤。在我尝试使用new MyMapFragment()
实例化我的片段之前花了一段时间 - 而且,我的被覆盖的方法开始被调用!
我没有在我的类中覆盖newInstance()
,事后看来newInstance()
显然返回SupportMapFragment
的实例,而不是我的扩展类的实例(duh!)。
但我的问题是 - 为什么 有一个newInstance()
方法,为什么文档使用它,当它似乎与new SupportMapFragment()
一样好用?使用其中一个有什么区别?我无法找到SupportMapFragment的源代码,所以......
答案 0 :(得分:1)
在这种情况下,我相信newInstance
方法只是空构造函数的静态工厂方法所以没有效果(虽然没有可用的源代码我们无法确定),即它可能是这样的:
public static SupportMapFragment newInstance() {
return new SupportMapFragment();
}
为什么它存在?
newInstance(GoogleMap)
方法保持一致SupportMapFragment
的子类,可能是针对设备或平台优化的子类由于最后一点,在创建片段时始终使用静态工厂通常是一种好习惯,将来可以将其修改为:
public static SupportMapFragment newInstance() {
SupportMapFragment fragment = new SupportMapFragment();
Bundle args = new Bundle();
args.putBoolean("secretOptionNotEnabledWithNormalConstructor", true);
fragment.setArguments(args);
return fragment;
}