2010-12-03 51 views
0

J'ai une application Android qui utilise Google Maps. Ma première activité démarre une mapview avec quelques icônes cliquables. Lorsqu'une icône est cliquée, une nouvelle activité (intention) est lancée avec une carte différente. À partir de la nouvelle carte, je clique sur le bouton de retour qui me ramène à ma première carte. Cependant, lorsque je commence à zoomer ou à me déplacer sur la carte, seules les tuiles chargées à l'origine apparaîtront. Comment puis-je changer cela? Si vous modifiez l'orientation du téléphone, la carte se rafraîchira et se comportera normalement (car l'application sera redémarrée). J'ai donc ajouté Android: configChanges = "orientation" pour arrêter le redémarrage lors du changement d'orientation. J'ai ajouté cela parce que je ne veux pas recharger tous les marqueurs (utilise un service web et peut prendre un certain temps).Android Google Maps tuiles ne charge pas sur le bouton "retour" cliquez sur

Je veux juste que les dalles se chargent lorsque je clique sur "retour" à la carte d'origine. Des idées?

Répondre

3

J'ai récemment rencontré ce problème! Vérifiez votre journal - vous obtenez probablement une erreur sur les lignes de "IllegalStateException: Pool de connexions arrêté." Aussi comme moi, les seules réponses que vous avez trouvées semblaient être pour les personnes qui n'avaient pas configuré leur clé API Google correctement. : - \

J'ai finalement rencontré this link. (Vous devez généralement être connecté à votre compte Google pour lire ces messages)

Il semble qu'il y ait un bug qui n'autorise qu'une activité de carte par application. Quelque chose à faire avec la carte rafraîchissante, je suppose. Je l'ai contourné en finissant chaque activité de la carte après avoir chargé la nouvelle, provoquant le rechargement de l'activité dans son intégralité lorsque l'utilisateur y revient. Ce n'est pas idéal, mais ça a bien marché pour moi jusqu'ici.

Dans un peu plus en détail:

  1. Enregistrer toute information sur la carte que vous souhaitez récupérer plus tard. Le centre de la carte et le zoom de la carte me viennent à l'esprit. Mettez-le à un endroit global ou transmettez-le avec votre intention. Après avoir lancé l'intention pour la deuxième activité, appelez finish() sur le premier. Si vous souhaitez que les deux cartes apparaissent à l'utilisateur sous la même forme, vous devez supprimer la transition glissante qui se produit par défaut lorsqu'une nouvelle activité est démarrée. Faites cela en appelant cette ligne immédiatement après la fin():

overridePendingTransition(0, 0);

  1. Lorsque votre seconde carte l'activité a besoin pour terminer, répétez l'étape 1 si nécessaire, puis charger la première activité de carte à l'aide de retour la même méthode que l'étape 2. Le code de 2 irait dans la méthode onBackPressed() de l'activité, et partout où c'est approprié (peut-être vous avez un bouton d'annulation ou quelque chose). Lors de la création de la première activité, assurez-vous de rechercher les éléments enregistrés lors de la dernière visualisation de l'activité et de modifier votre carte de manière appropriée.

Peut-être était bavard, mais j'utiliser ce site beaucoup et je l'apprécie toujours les réponses qui disent trop beaucoup plus que ceux qui disent trop peu, haha!

+0

Oui. J'ai fini par faire ce que vous suggérez en finissant et en recréant toujours l'activité. Pas exactement ce que j'espérais mais ça marche. – Damon