support studio linearlayout inside implement google example android android-maps google-play-services

android - studio - Servicio de Google Play: SupportMapFragment.getMap() siempre devolviendo nulo



mapfragment inside linearlayout (1)

Posible duplicado:
¿Cómo sé que el mapa está listo para usarse cuando se usa SupportMapFragment?

Actualmente estoy probando el nuevo Maps API V2, pero realmente estoy teniendo problemas para que funcione correctamente.

Mi problema es que getMap () siempre devuelve null.

He probado la llamada en 3 puntos diferentes:

  1. onCreate ()
  2. En resumen()
  3. en un controlador que se llama unos segundos después de que el mapa ya esté visible en la pantalla

Aquí está el código:

public class MapActivity extends FragmentActivity { private SupportMapFragment mMapFragment; @Override protected void onCreate(Bundle arg0) { super.onCreate(arg0); setupMap(); } @Override protected void onResume() { super.onResume(); setupMap(); new Handler().postDelayed(new Runnable() { @Override public void run() { setupMap(); } }, 5000); } private void setupMap() { if (getSupportFragmentManager().findFragmentById(R.id.fragment) == null) { mMapFragment = CustomMapFragment.newInstance(); getSupportFragmentManager().beginTransaction() .add(R.id.map_wrapper, mMapFragment).commit(); } GoogleMap map = mMapFragment.getMap(); if (map != null) { mMapFragment.getMap().getUiSettings().setZoomControlsEnabled(true); mMapFragment.getMap().getUiSettings().setZoomGesturesEnabled(true); mMapFragment.getMap().setMyLocationEnabled(true); } }

¿Algo que estoy haciendo mal?


Como indica CommonsWare en la pregunta vinculada, el problema solo se produce cuando se crea el programa SupportMapFragment programación y no una etiqueta XML <fragment> .

Si se crea mediante programación, el mapa estará disponible en la llamada onActivityCreated() . Así que mi solución es la siguiente:

mMapFragment = new SupportMapFragment() { @Override public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); GoogleMap map = mMapFragment.getMap(); if (map != null) { //Your initialization code goes here } } };