Estoy tratando de hacer un diseño de pestaña igual en Play Store. Pude mostrar el diseño de la pestaña usando fragmentos y un visor de androidhive. Sin embargo, no puedo implementar google maps v2 en él. Ya busqué en Internet durante horas, pero no puedo encontrar un tutorial sobre cómo hacerlo. ¿Alguien puede mostrarme cómo?
android
google-maps
android-fragments
Jeongbebs
fuente
fuente
Activity
yFragment
una vez quegetChildFragmentManager()
se usó.Respuestas:
Al usar este código, podemos configurar MapView en cualquier lugar, dentro de cualquier ViewPager o Fragment o Activity.
En la última actualización de Google for Maps, solo MapView es compatible con fragmentos. MapFragment & SupportMapFragment no funciona. Podría estar equivocado, pero esto es lo que vi después de intentar implementar MapFragment & SupportMapFragment.
Configurar el diseño para mostrar el mapa en el archivo
location_fragment.xml
:Ahora, codificamos la clase Java para mostrar el mapa en el archivo
MapViewFragment.java
:Finalmente, necesita obtener la clave API para su aplicación registrándola en Google Cloud Console . Registre su aplicación como aplicación nativa de Android.
fuente
<uses-library android:name="com.google.android.maps" android:required="true" />
es para Maps V1, no Maps V2. Habrá dispositivos en el futuro que no tengan lacom.google.android.maps
biblioteca de firmware pero que sean perfectamente capaces de mostrar mapas de Maps V2. Tener esta línea en su manifiesto evitará que se ejecute en dichos dispositivos, y esta línea no es necesaria para el uso de Maps V2. Por ejemplo, los 17 proyectos en github.com/commonsguy/cw-omnibus/tree/master/MapsV2 no tienen este<uses-library>
elemento y funcionan bien.java.lang.NullPointerException: Attempt to invoke interface method 'void com.google.maps.api.android.lib6.impl.bo.o()' on a null object reference
El siguiente enfoque funciona para mí.
fragment_location_info.xml
fuente
java.lang.NullPointerException: IBitmapDescriptorFactory is not initialized
. Pensé que el intento de captura se encargaría de esto. ¿Alguien me puede ayudar?mMapView
?getMap()
es obsoleto. Utilice getMapAsync y onMapReadyCallback en su lugar: stackoverflow.com/a/31371953/4549776Puede usar esta línea si desea usarla
GoogleMap
en un fragmento:fuente
Últimas cosas con en
getMapAsync
lugar de la obsoleta.1. verifique el manifiesto para
Puede obtener la clave API para su aplicación registrándola en
Google Cloud Console
. Registre su aplicación como aplicación nativa de Android2. en su diseño de fragmento .xml agregue FrameLayout (no fragmento):
o cualquier altura que quieras
3. En onCreateView en tu fragmento
fuente
<fragment
lugar deFrameLayout
SupportMapFragment
enMapFragment
la actividad, cambió elFrameLayout
enfragment
en el archivo de diseño y y cambió elcom.google.android.gms.maps.SupportMapFragment
encom.google.android.gms.maps.MapFragment
lo bien que funciona para mí. Antes de estos cambios no funcionó. Tal vez esto ayude a otros ...Aquí lo que hice en detalle:
Desde aquí puede obtener la clave de API de Google Map
forma alternativa y sencilla
primero inicie sesión en su cuenta de Google y visite las bibliotecas de Google y seleccione Google Maps Android API
dependencia encontrada en la actividad del mapa predeterminado de Android Studio:
ponga su clave en el archivo mainifest de Android bajo la aplicación como a continuación
en AndroidMainifest.xml realice estos cambios:
Código de fragmento:
en tu fragmento xml:
fuente
Para el problema de obtener un
NullPointerException
cuando cambiamos las pestañas en unFragmentTabHost
solo necesita agregar este código a su clase que tiene elTabHost
. Me refiero a la clase donde inicializas las pestañas. Este es el código:fuente
en fragment_layout
fuente
Cuando agrega su mapa, use:
en lugar de
.add
y en lugar degetFragmentManager
.fuente
Acabo de crear MapActivity e inflarlo en fragmentos. MapActivity.java:
activity_map.xml:
MapFragment.java:-
fuente
Tengo una solución alternativa para
NullPointerException
cuando elimine el fragmentoDestoryView
, solo ponga su código enonStop()
noonDestoryView
. ¡Funciona bien!fuente
De acuerdo con https://developer.android.com/about/versions/android-4.2.html#NestedFragments , puede usar fragmentos anidados para lograr esto llamando a getChildFragmentManager () si aún desea usar el fragmento de Google Maps en lugar del ver dentro de tu propio fragmento:
donde "contenido" es el diseño raíz en su fragmento (preferiblemente un FrameLayout). La ventaja de utilizar un fragmento de mapa es que el sistema gestiona automáticamente el ciclo de vida del mapa.
Aunque la documentación dice "No se puede inflar un diseño en un fragmento cuando ese diseño incluye un <fragmento>. Los fragmentos anidados solo son compatibles cuando se agregan dinámicamente a un fragmento", de alguna manera lo hice con éxito y funcionó bien. Aquí está mi código:
en el método onCreateView () del fragmento:
En el diseño:
¡Espero eso ayude!
fuente
Agregar dinámicamente un fragmento de mapa para ver el Localizador:
Si está apuntando a una aplicación anterior al nivel de API 12, haga una instancia de SupportedMapFragment y agréguela a su adaptador de página de visualización.
El nivel de API 12 o superior admite objetos MapFragment
fuente
Este es el camino de Kotlin:
En
fragment_map.xml
deberías tener:En tu
MapFragment.kt
deberías tener:Llamar
setupMap()
enonCreateView
.fuente