GetMap () de SupportMapFragment devuelve null
Estoy intentando crear un SupportMapFragment
dinámicamente y ponerlo en un contenedor de FrameLayout
.
Mi problema es que mMapFragment.getMap()
devuelve null
…
- API de Google Maps v2 en el cuadro de diálogo
- Android Google Maps v2, MAP_TYPE_NONE y cuadrados negros
- Pantalla en blanco en SlidingMenu cuando se utiliza con Fragmento (GMap)
- Android Map V2 - ¿Por qué MAPS_RECEIVE permiso?
- Cómo obtener latitud y longitud de la dirección en android
¿Alguien puede ayudar?
CenterMapFragment.java
public class CenterMapFragment extends Fragment { private SupportMapFragment mMapFragment; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { return inflater.inflate(R.layout.center_map_fragment, container, false); } @Override public void onActivityCreated (Bundle savedInstanceState){ super.onActivityCreated(savedInstanceState); if (GooglePlayServicesUtil.isGooglePlayServicesAvailable(getActivity()) == ConnectionResult.SUCCESS) { setUpMapIfNeeded(); } } private void setUpMapIfNeeded() { if (mMapFragment == null) { mMapFragment = SupportMapFragment.newInstance(); FragmentTransaction fragmentTransaction = getChildFragmentManager().beginTransaction(); fragmentTransaction.replace(R.id.map, mMapFragment); fragmentTransaction.commit(); setUpMap(); } } private void setUpMap() { GoogleMap map = mMapFragment.getMap(); // map is null! } @Override public void onResume() { super.onResume(); setUpMapIfNeeded(); } }
Center_map_fragment.xml
<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <FrameLayout android:id="@+id/map" android:layout_width="match_parent" android:layout_height="match_parent" > </FrameLayout> <Button android:id="@+id/btn_loc" android:layout_width="60dp" android:layout_height="50dp" android:layout_alignParentBottom="true" android:layout_alignParentRight="true" android:background="@drawable/locbtn" /> </RelativeLayout>
- Android - Dragging marcador sin tener que mantener en el mapa api v2
- ¿Cómo habilitar la información de tráfico a lo largo de una ruta específica en Google Maps V2?
- Implementación de Google Map APIv2, línea de archivo XML binario # 6: Error al inflar fragmento de clase
- Dibuja una forma personalizada en android utilizando XML
- Cómo obtener la ubicación de Google Map después de soltar Pin sobre ella
- Android calcula el área de polígono
- Cómo tamaño de los iconos de marcadores personalizados para Android Google Maps v2?
- Cómo compensar la vista de globo en un marcador en Google Map V2?
commit()
en un FragmentTransaction
no realiza sus operaciones inmediatamente. En el momento en que usted llame a setUpMap()
, onCreateView()
no habrá sido llamado en el SupportMapFragment
, y por lo tanto no habrá aún un mapa.
Un enfoque es no utilizar fragmentos anidados, eligiendo en su lugar tener CenterMapFragment
extender SupportMapFragment
, en cuyo caso getMap()
debería funcionar en cualquier momento después de onCreateView()
(por ejemplo, onActivityCreated()
).
En el siguiente enlace MapView se utiliza como CommonsWare sugiere en la última parte de su comentario:
http://ucla.jamesyxu.com/?p=287
public class MapFragment extends Fragment { MapView m; @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { // inflat and return the layout View v = inflater.inflate(R.layout.map_fragment, container, false); m = (MapView) v.findViewById(R.id.mapView); m.onCreate(savedInstanceState); return v; } @Override public void onResume() { super.onResume(); m.onResume(); } @Override public void onPause() { super.onPause(); m.onPause(); } @Override public void onDestroy() { super.onDestroy(); m.onDestroy(); } @Override public void onLowMemory() { super.onLowMemory(); m.onLowMemory(); } }
Espero que estos sean útiles.
Vocación
fragmentTransaction.commit();
Es asíncrono, el mapa no estará listo todavía cuando regrese de él. Simplemente llame
getFragmentManager().executePendingTransactions();
Como la siguiente línea, que la hará síncrona y la ejecutará para la siguiente instrucción para recoger el mapa acabado. Si le preocupa el tiempo que tarda, ponga toda la inicialización en AsyncTask
y muestre un indicador de progreso al usuario mientras el mapa se está inicializando.
- Problema con la localización de Android: no todos los elementos de la presentación se actualizan correctamente al cambiar entornos locales
- ¿Cuál es el uso de @SuppressLint ("InlinedApi")