Migration d'une MapActivity avec un SupportMapFragment statique dans la disposition vers des fragments dynamiques purs.SupportMapFragment imbriqué dans SupportFragment getMap() renvoie la valeur NULL
Le code ci-dessous est le fragment parent. Il contient une vue de contenu que je veux contenir un SupportMapFragment créé dynamiquement. Le contenu se trouve être un LinearLayout avec l'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"));
}
}
Le code ci-dessous est mon mapfragment personnalisé
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);
}
}
À la ligne environ 17 de mon fragment qui contient la carte, je reçois un pointeur NULL. Puisque le code fonctionne dans la méthode onactivitycreated() de mon MapFragment actuel, la carte ne doit pas être prête par la ligne 17 dans la méthode onviewcreated.
Essayez d'insérer une méthode dans MapFragment qui crée un marqueur et appelez cette méthode à partir du fragment parent. –
n'a pas aidé. Merci quand même –
Avez-vous déjà entendu parler de la méthode getMapAsync()? –