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:
- onCreate ()
- En resumen()
- 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
}
}
};