Миграция из MapActivity со статическим SupportMapFragment в макете для чистых динамических фрагментов.SupportMapFragment, вложенный в SupportFragment getMap() возвращает NULL
Приведенный ниже код является родительским фрагментом. Он содержит представление содержимого, которое я хочу содержать динамически созданный SupportMapFragment. Содержимое представляет собой LinearLayout с id: map_container.
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 из моего фрагмента, который содержит карту, я получаю нулевой указатель. поскольку код работает в методе onactivitycreated() моего фактического MapFragment, карта не должна быть готова по строке 17 в методе onviewcreated.
Попробуйте поместить метод в MapFragment, который делает маркер, и вызовите этот метод из родительского фрагмента. –
не помогло. Спасибо в любом случае –
Вы когда-нибудь слышали о методе getMapAsync()? –