Android 嵌套在SupportFragment getMap()中的SupportMapFragment返回NULL
从布局中具有静态SupportMapFragment的MapActivity迁移到纯动态片段 下面的代码是父片段。它包含一个内容视图,我想包含一个动态创建的SupportMapFragment。内容恰好是id为:map\u容器的线性布局Android 嵌套在SupportFragment getMap()中的SupportMapFragment返回NULL,android,google-maps,fragment,supportmapfragment,mapfragment,Android,Google Maps,Fragment,Supportmapfragment,Mapfragment,从布局中具有静态SupportMapFragment的MapActivity迁移到纯动态片段 下面的代码是父片段。它包含一个内容视图,我想包含一个动态创建的SupportMapFragment。内容恰好是id为:map\u容器的线性布局 public class MapFragment extends android.support.v4.app.Fragment { private final LatLng NotHamburg = new LatLng(41.8236, -
public class MapFragment extends android.support.v4.app.Fragment {
private final LatLng NotHamburg = new LatLng(41.8236, -71.4222);
protected GoogleMap _MAP;
CustomMapFragment mapFragment;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View rootView = inflater.inflate(R.layout.fragment_map, container, false);
mapFragment = new CustomMapFragment();
FragmentTransaction transaction = getChildFragmentManager().beginTransaction();
transaction.add(R.id.map_container, mapFragment).commit();
newMarker();
return rootView;
}
@Override
public void onViewCreated(View view, Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
}
//oh, user wants to see a new marker or remove some from inside the main fragment? Lets try...
public void newMarker(){
_MAP = mapFragment.getMap();
_MAP.addMarker(new MarkerOptions().position(NotHamburg).title("NOTHamburg"));
}
}
下面的代码是我的自定义mapfragment
public class CustomMapFragment extends com.google.android.gms.maps.SupportMapFragment {
private final LatLng HAMBURG = new LatLng(40.8236, -71.4222);
private GoogleMap googleMap;
public static CustomMapFragment newInstance() {
CustomMapFragment fragment = new CustomMapFragment();
return fragment;
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
googleMap = getMap();
if (googleMap != null) {
googleMap.addMarker(new MarkerOptions().position(HAMBURG).title("Hamburg"));
googleMap.moveCamera(CameraUpdateFactory.newLatLngZoom(HAMBURG, 15));
googleMap.animateCamera(CameraUpdateFactory.zoomTo(10), 2000, null);
}
}
在包含映射的片段的大约第17行,我得到一个空指针。由于代码在实际MapFragment的onactivitycreated()方法中工作,因此在onviewcreated方法的第17行之前,映射不能准备就绪。解决方案是以较小的延迟将与父片段相关的任何映射放入处理程序中
有兴趣了解更多关于生命周期的知识,以及在哪里开始主循环和侦听器的好地方。我想我只需要对UI线程和其他东西更加小心 尝试在MapFragment中放置一个生成标记的方法,并从父片段调用该方法。没有帮助。谢谢你听说过getMapAsync()方法吗?有更好的解决方案,其中之一是使用最新的Google Play Service API进行更好的设计。我已经为几个场景创建了一个repo:看看它是否为你提供了更好的方法。谢谢。我去看看。我已经解决了我的问题,但我现在正在看你的项目。