Android Cartes V2 MapView à l'intérieur custom fragment (NPE)
Je ne veux pas utiliser ou étendre SupportMapFragment
ou MapFragment
. J'ai ma propre classe de base avec un tas de code.
La documentation indique clairement que lorsque quelqu'un utilise MapView
par lui-même, tous les correspondants du cycle de vie des méthodes (onCreate()
onResume()
etc.) doit être appelée.
La plupart du cycle de vie des méthodes dans un Fragment
sont semblables à une Activity
mais lorsque je bascule en arrière et vient entre mes Fragment
j'ai fini par obtenir une obfuscation des NPE dans onDestroy()
ou dans onResume()
méthodes.
Tous les échantillons fournis utiliser un Activity
avec un MapView
mais n'est pas coutume Fragment
.
Quelqu'un a déjà fait? Pouvez-vous fournir un exemple de code d'un MapView
dans votre propre Fragment
classe?
Vous devez vous connecter pour publier un commentaire.
J'ai réussi à y compris une MapView (v2) personnalisé dans un Fragment de lui-même intégré dans un ViewPager. Dans mon cas, la MapView est inclus dans le Fragment de fichier de mise en page. J'ai dû appeler le cycle de vie des méthodes sur MapView (
onCreate()
appeléonCreateView()
à partir du Fragment), et de l'appeler manuellementMapsInitializer.initialize(context)
pour éviter unNullPointerException
de la classe BitmapDescriptorFactory (pour obtenir le bitmap pour les marqueurs). Cette dernière astuce est étrange, et je ne sais pas pourquoi la Carte n'est pas correctement initialisé sans cet appel, c'est peut-être juste un bug dans la version actuelle ...Dans mon cas, je n'ai pas eu de
NullPointerException
dansonResume()
ouonDestroy()
.J'ai un peu de mal avec PoPy la réponse, mais en fin de compte je l'ai réussi et c'est ici que je suis venu avec. C'est probablement utile à d'autres personnes qui seront également venir à travers cette question:
Et voici le correspondant
res/layout/map_fragment.xml
:Vous pouvez omettre le
RelativeLayout
(et de passer la xmlns doctype jusqu'à votre nouvel élément racine, dans ce cas, lecom.google.android.gms.maps.MapView
) si vous avez juste un élément de la mise en page comme dans cet exemple.onCreateView
méthode. Un autre problème que j'ai trouvé: j'ai mis en œuvresetOnMapClickListener
pour la GoogleMap objet, mais il semble que tous les clics ne sont pas manipulés correctement. Il fait un peu de clics, pas tous. Ne sais pas ce qui se passe ici.getChildFragmentManager()
du parent fragment au lieu degetFragmentManager()
pour éviter le problème que la carte est livré dans un seul fragment. Mais alors que de glisser dans pager, j'obtiens des NullPointerException.MapView.onDestroy()
et claire leMapView
de référence à l'intérieur deFragment.onDestroyView()
ou encore la reprise de fragment a été montrant un vide de la carte grise (un peu de sens étant donné que l'appel deMapView.onCreate()
à l'intérieur deFragment.onCreateView()
).Tout en utilisant un autre
MapView
à la suite de deux choses sont d'une importance vitalemapView
?Activity
ouFragment
,où que vous l'utilisezfindViewById(R.id.yourgivenid)
surActivity
onCreate()
après la misesetContentView
ou surFragment
onCreateView