Android - MapView contenues dans une Listview
Actuellement, je suis en train de placer une MapView dans une ListView. Personne n'a jamais eu de succès avec cela? Est-il même possible? Voici mon code:
ListView myList = (ListView) findViewById(android.R.id.list);
List<Map<String, Object>> groupData = new ArrayList<Map<String, Object>>();
Map<String, Object> curGroupMap = new HashMap<String, Object>();
groupData.add(curGroupMap);
curGroupMap.put("ICON", R.drawable.back_icon);
curGroupMap.put("NAME","Go Back");
curGroupMap.put("VALUE","By clicking here");
Iterator it = data.entrySet().iterator();
while (it.hasNext())
{
//Get the key name and value for it
Map.Entry pair = (Map.Entry)it.next();
String keyName = (String) pair.getKey();
String value = pair.getValue().toString();
if (value != null)
{
//Add the parents -- aka main categories
curGroupMap = new HashMap<String, Object>();
groupData.add(curGroupMap);
//Push the correct Icon
if (keyName.equalsIgnoreCase("Phone"))
curGroupMap.put("ICON", R.drawable.phone_icon);
else if (keyName.equalsIgnoreCase("Housing"))
curGroupMap.put("ICON", R.drawable.house_icon);
else if (keyName.equalsIgnoreCase("Website"))
curGroupMap.put("ICON", R.drawable.web_icon);
else if (keyName.equalsIgnoreCase("Area Snapshot"))
curGroupMap.put("ICON", R.drawable.camera_icon);
else if (keyName.equalsIgnoreCase("Overview"))
curGroupMap.put("ICON", R.drawable.overview_icon);
else if (keyName.equalsIgnoreCase("Location"))
curGroupMap.put("ICON", R.drawable.map_icon);
else
curGroupMap.put("ICON", R.drawable.icon);
//Pop on the Name and Value
curGroupMap.put("NAME", keyName);
curGroupMap.put("VALUE", value);
}
}
curGroupMap = new HashMap<String, Object>();
groupData.add(curGroupMap);
curGroupMap.put("ICON", R.drawable.back_icon);
curGroupMap.put("NAME","Go Back");
curGroupMap.put("VALUE","By clicking here");
//Set up adapter
mAdapter = new SimpleAdapter(
mContext,
groupData,
R.layout.exp_list_parent,
new String[] { "ICON", "NAME", "VALUE" },
new int[] { R.id.photoAlbumImg, R.id.rowText1, R.id.rowText2 }
);
myList.setAdapter(mAdapter); //Bind the adapter to the list
Merci d'avance pour votre aide!!
Ok, je vais mordre. Pourquoi avez-vous besoin d'une MapView dans une liste?
Par ailleurs, quels sont les problèmes que vous rencontrez?
Hypothétique -- Vous liste tout par une entreprise spécifique..j'aimerais afficher une carte de l'endroit où il est à la dans la liste. Le problème que je rencontre est que je ne sais pas par où commencer. Je tiens à le contenir dans une liste plutôt que de devoir recommencer une toute nouvelle Intention (quel genre de défaites de la listview).
hey Ryan, avez-vous fait avec montrant mapview dans listAdapter? Je suis aussi en train d'essayer de mettre en œuvre une telle fonctionnalité.
Par ailleurs, quels sont les problèmes que vous rencontrez?
Hypothétique -- Vous liste tout par une entreprise spécifique..j'aimerais afficher une carte de l'endroit où il est à la dans la liste. Le problème que je rencontre est que je ne sais pas par où commencer. Je tiens à le contenir dans une liste plutôt que de devoir recommencer une toute nouvelle Intention (quel genre de défaites de la listview).
hey Ryan, avez-vous fait avec montrant mapview dans listAdapter? Je suis aussi en train d'essayer de mettre en œuvre une telle fonctionnalité.
OriginalL'auteur Ryan | 2010-06-02
Vous devez vous connecter pour publier un commentaire.
Dans ce cas, vous devrez ajouter la MapView à la liste, tout comme vous le feriez pour tout autre point de vue. Voici un tutoriel rapide sur la façon de créer une liste personnalisée de l'adaptateur. Mais je dois vous mettre en garde, une MapView est assez lourd, et si vous essayez d'obtenir un tas d'entre eux sur l'écran, vous allez remarquer l'application étant très lente! Vous pouvez simplement ajouter un bouton à l'élément de liste qui dirige l'utilisateur vers une autre page avec plus d'informations, y compris une carte.
J'ai SupportMapFragment , puis-je utiliser à l'intérieur de listview ligne,? j'ai coutume adaptateur mais je ne reçois pas comment faire pour utiliser la carte à l'intérieur de
getChildView()
deBaseExpandableListAdapter
. Simplement, nous pouvons faire comme((TextView) convertView.findViewById(R.id.parent_txt_list_title)).setText(parent.getTitle());
mais comment on peut faire la même chose pour la carte. Pouvez-vous s'il vous plaît aider moiJ'ai ajouté une carte dans une liste, mais en face de zoom/pincée problème. en raison de parent de défilement.
OriginalL'auteur CaseyB
De poster une solution alternative à un vieux la réponse (plus de 2 ans en fait), mais j'ai pensé que cela pourrait aider quelqu'un qui pourrait tomber sur ce post, comme je l'ai fait.
REMARQUE: Cela peut être utile pour quelqu'un qui n'a besoin de l'affichage de la position dans une "Carte", mais n'a pas besoin d'interagir avec elle dans la
ListView
. La réelle de la Carte peut être affichée à dire, un détails page, après avoir cliqué sur un élément dans laListView
Comme l'a déjà souligné @CaseyB,
MapView
est une sorte de heavy vue. Pour contrer cet aspect (et pour rendre la vie un peu plus facile pour moi 😉 ), j'ai choisi de construire une URL comme vous le feriez pour une charge statique de Google de la Carte, à l'aide de plusieurs paramètres qui sont nécessaires pour mon application. Vous pouvez obtenir plus d'options ici: https://developers.google.com/maps/documentation/staticmaps/D'abord, quand je suis en construisant les données pour ma
ListView
, je passe des données telles que le latitude et longitude à une chaîne avec quelques variables statiques prises à partir du lien ci-dessus. Je reçois mes coordonnées à partir de l'Facebook API.Le code que j'utilise pour construire le lien:
Ci-dessus URL construite, lorsqu'il est utilisé dans un navigateur, renvoie une
.PNG
fichier. Alors, dans monadapter
pour l'activité, j'utilise @Fedor est Chargement Paresseux pour afficher l'image générée à partir de l'URL créé plus tôt à afficher dans la coutumeListView
. Bien sûr, vous pouvez choisir votre propre méthode pour afficher cetteMap
(Carte de l'image en fait).Un exemple du résultat final.
Actuellement, j'ai environ 30 impair d'Archivage des Cartes (je l'utilise en conjonction avec le Facebook SDK) dans ce
ListView
, mais les utilisateurs peuvent avoir 100 d'entre eux et il y a eu absolument aucun rapport de ce ralentissement.Je soupçonne que cela pourrait ne pas aider les OP, compte tenu du temps qui s'est écoulé depuis la question, mais j'espère que ça aide d'autres utilisateurs de l'atterrissage sur cette page à l'avenir.
Wow, génial réponse!
Ne pouvais pas penser à une meilleure façon. Excellent travail.
Je suis en train de travailler sur la même question. J'en veux pour preuve réelle de la route(pas en ligne droite) entre deux emplacement dans la carte dans la vue liste. quelqu'un sait comment faire?
Est-ce toujours la meilleure façon de le faire? L'Android de Google Maps SDK ajouté un "Mode simplifié" récemment, mais cette voie semble être plus léger. Est-il possible d'être en mesure d'ajouter plus de les étiquettes les marqueurs? Il semble que c'est limité à 1 personnage.
OriginalL'auteur Siddharth Lele
Tout d'abord, je suis ne pense pas que l'affichage de plusieurs MapViews à la fois fonctionne. MapActivity documents qu'un seul est pris en charge par processus:
"Un seul MapActivity est pris en charge par processus. Plusieurs MapActivities en cours d'exécution simultanément sont susceptibles d'interférer dans l'inattendu et indésirable façons."
(http://code.google.com/android/add-ons/google-apis/reference/index.html)
Il n'est pas explicitement dire que vous ne pouvez pas avoir plusieurs MapViews dans un MapActivity mais je pense qu'ils vont interférer ainsi, quel que soit le type de ViewGroup parent.
Deuxième, vous pourriez envisager d'utiliser l'API des cartes statiques pour obtenir une simple image pour l'inclusion dans la liste -- à part entière, MapView peut-être inutilement lourd dans tous les cas:
http://code.google.com/apis/maps/documentation/staticmaps/
Le seul problème que vous pouvez potentiellement faire face est que l'API des Cartes Statiques limites d'utilisation par utilisateur", ce qui veut probablement dire par IP (il n'a pas besoin d'une clé API), et les réseaux mobiles peut être problématique avec l'utilisation de la propriété intellectuelle limitant. Je ne sais pas exactement comment cela va se jouer.
Ah, je vois. Dans ce cas, vous pouvez soit utiliser une liste personnalisée de l'adaptateur, comme CaseyB noté, ou peut-être juste utiliser une verticale LinearLayout dans un ScrollView, si les articles de votre liste sont largement hétérogène.
OriginalL'auteur Steve
Il est possible, à partir de la GoogleMapSample code lui-même:
Code complet disponible sur: https://github.com/googlemaps/android-samples/blob/master/ApiDemos/app/src/main/java/com/example/mapdemo/LiteListDemoActivity.java
OriginalL'auteur Bibu
j'ai connu le même problème aujourd'hui - s'avère que vous avez à créer la MapView à l'intérieur de votre MapActivity sinon vous obtiendrez un message d'erreur tel que Impossible de Gonfler Vue com.google.cartes.MapView ou alors... Que de passer ce MapView à votre ListAdapter et cracher en cas de besoin. J'ai dû placer la MapView à l'intérieur d'un RelativeLayout pour ajuster la Hauteur et la Largeur que je veux (pour quelque raison MapView ne se comportent pas de la "normal" viewish façon).
Vous pouvez me demander pour plus de Détails si vous le souhaitez 🙂
OriginalL'auteur martyglaubitz