Estou tentando fazer o mesmo layout da guia na Play Store. Eu consegui exibir o layout da guia usando fragmentos e viewpager do androidhive. No entanto, não consigo implementar o google maps v2 nele. Eu pesquisei na internet por horas já, mas não consigo encontrar um tutorial sobre como fazê-lo. Alguém pode me mostrar como?
android
google-maps
android-fragments
Jeongbebs
fonte
fonte
Activity
eFragment
uma vez quegetChildFragmentManager()
foi usado.Respostas:
Usando esse código, podemos configurar o MapView em qualquer lugar, dentro de qualquer ViewPager, Fragmento ou Atividade.
Na atualização mais recente do Google for Maps, apenas o MapView é suportado para fragmentos. MapFragment & SupportMapFragment não funciona. Posso estar errado, mas foi o que vi depois de tentar implementar o MapFragment & SupportMapFragment.
Configurando o layout para mostrar o mapa no arquivo
location_fragment.xml
:Agora, codificamos a classe Java para mostrar o mapa no arquivo
MapViewFragment.java
:Por fim, você precisa obter a chave da API para seu aplicativo registrando-o no Google Cloud Console . Registre seu aplicativo como aplicativo nativo para Android.
fonte
<uses-library android:name="com.google.android.maps" android:required="true" />
é para o Maps V1, não para o Maps V2. No futuro, haverá dispositivos que não possuem acom.google.android.maps
biblioteca de firmware, mas são perfeitamente capazes de mostrar mapas do Maps V2. Ter essa linha em seu manifesto impedirá a execução nesses dispositivos, e essa linha não é necessária para o uso do Maps V2. Por exemplo, os 17 projetos em github.com/commonsguy/cw-omnibus/tree/master/MapsV2 não possuem esse<uses-library>
elemento e funcionam bem.java.lang.NullPointerException: Attempt to invoke interface method 'void com.google.maps.api.android.lib6.impl.bo.o()' on a null object reference
A abordagem a seguir funciona para mim.
fragment_location_info.xml
fonte
java.lang.NullPointerException: IBitmapDescriptorFactory is not initialized
. Eu pensei que o try catch iria cuidar disso. Alguém pode me ajudar?mMapView
?getMap()
está obsoleto. Use getMapAsync e onMapReadyCallback: stackoverflow.com/a/31371953/4549776Você pode usar esta linha se desejar usar
GoogleMap
em um fragmento:fonte
Coisas mais recentes com em
getMapAsync
vez da obsoleta.1. verifique o manifesto
Você pode obter a Chave da API do seu aplicativo registrando-o em
Google Cloud Console
. Registre seu aplicativo como aplicativo nativo para Android2. No layout do seu fragmento .xml, adicione FrameLayout (não fragmento):
ou qualquer altura que você quiser
3. No onCreateView no seu fragmento
fonte
<fragment
em vez deFrameLayout
SupportMapFragment
paraMapFragment
dentro da atividade, mudeiFrameLayout
parafragment
o arquivo de layout e o mudeicom.google.android.gms.maps.SupportMapFragment
paracom.google.android.gms.maps.MapFragment
ele, funciona bem para mim. Antes dessas mudanças, não funcionava. Talvez isso ajude outros ....aqui o que eu fiz em detalhes:
A partir daqui, você pode obter a chave API do Google Map
maneira alternativa e simples
primeiro faça login na sua conta do google, visite as bibliotecas do google e selecione API Android do Google Maps
dependência encontrada na atividade de mapa padrão do android studio:
coloque sua chave no arquivo mainifest android em aplicação como abaixo
no AndroidMainifest.xml faça essas alterações:
Código do fragmento:
em você fragmentar xml:
fonte
Para a questão de obter um
NullPointerException
quando alteramos as guias em um,FragmentTabHost
você só precisa adicionar esse código à sua classe que possui oTabHost
. Quero dizer a classe em que você inicializa as guias. Este é o código:fonte
em fragment_layout
fonte
Quando você adiciona seu mapa, use:
em vez de
.add
e em vez degetFragmentManager
.fonte
Acabei de criar MapActivity e inflar para fragmentar. MapActivity.java:
activity_map.xml:
MapFragment.java:-
fonte
Eu tenho uma solução alternativa para
NullPointerException
quando remover fragmento emDestoryView
, basta colocar o seu códigoonStop()
nãoonDestoryView
. Funciona bem!fonte
De acordo com https://developer.android.com/about/versions/android-4.2.html#NestedFragments , você pode usar fragmentos aninhados para conseguir isso chamando getChildFragmentManager () se ainda quiser usar o fragmento do Google Maps em vez do veja dentro de seu próprio fragmento:
onde "conteúdo" é o layout raiz do seu fragmento (de preferência um FrameLayout). A vantagem de usar um fragmento de mapa é que o ciclo de vida do mapa é gerenciado automaticamente pelo sistema.
Embora a documentação diga "Você não pode inflar um layout em um fragmento quando esse layout inclui um <fragmento>. Fragmentos aninhados são suportados apenas quando adicionados dinamicamente a um fragmento"., De alguma forma, fiz isso com êxito e funcionou bem. Aqui está o meu código:
No método onCreateView () do fragmento:
No layout:
Espero que ajude!
fonte
Adicionando dinamicamente fragmento de mapa para visualizar o Pager:
Se você estiver direcionando para um aplicativo anterior ao nível 12 da API, crie uma instância do SupportedMapFragment e adicione-o ao seu adaptador de página de visualização.
A API nível 12 ou superior suporta objetos MapFragment
fonte
Esta é a maneira Kotlin:
Em
fragment_map.xml
você deve ter:No seu
MapFragment.kt
você deve ter:Chamada
setupMap()
noonCreateView
.fonte