web-dev-qa-db-fra.com

Android Google Map - Un marqueur cliqué ouvre une nouvelle activité ou une fenêtre plus grande

J'ai cherché de l'aide pour implémenter OnMarkerClickListener mais rien de ce que j'ai trouvé n'a fonctionné. Ceci est mon marqueur ci-dessous et lorsque vous cliquez dessus, il ne change que de couleur (bleu clair). Je le cherche pour ouvrir une plus grande fenêtre afin que je puisse mettre plus d'informations. Est-ce possible?

     googlemap.addMarker(new MarkerOptions()
    .position(new LatLng(49.378,-0.3904))
    .title("Hello World")
    .snippet("This is my test app")    
    .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE)));

Le marqueur fonctionne bien au-dessus de ma carte, mais maintenant je voudrais cliquer sur le marqueur et pour qu'il ouvre une nouvelle activité/page ou une fenêtre plus grande, ce qui est toujours plus facile à travailler. Comme je suis un vrai novice dans la création d'applications, si quelqu'un qui a réussi à obtenir un exemple de travail, veuillez mettre un lien ou du code.

Merci d'avance!

Modifier:

À partir du didacticiel qui a été suggéré, j'ai modifié une partie de MainActivity.Java.

J'ai ajouté dans OnMarkerClickListener et j'ai choisi d'ajouter des méthodes non implémentées à la classe publique

  public class MainActivity extends Activity implements LocationListener, OnMarkerClickListener {

Sous private void setUpMap (), j'ai ajouté à mon code: private Marker myMarker, le setonMarkerclick listener et myMarker =,:

       private Marker myMarker;
         {
googlemap.setOnMarkerClickListener(this);

myMarker = googlemap.addMarker(new MarkerOptions()
    .position(new LatLng(LatLng))
    .title("Hello World")
    .snippet("My First App")    
    .icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_ORANGE)));

 }

Dans la méthode non implémentée en bas, j'ai:

   @Override
   public boolean onMarkerClick(Marker arg0) {
// TODO Auto-generated method stub 

return false;

Que dois-je changer dans la partie publique Boolean OnMarkerClick? Je ne reçois aucune erreur mais cela ne fonctionne tout simplement pas. Que dois-je ajouter ou modifier?

Toute aide est appréciée!

22
user1977908

Événements de clic de marqueur

Ne pas accrocher au marqueur après avoir cliqué sur Android map v2

Citant le post ci-dessus

Vous pouvez utiliser un OnMarkerClickListener pour écouter les événements de clic sur le marqueur. Pour définir cet écouteur sur la carte, appelez GoogleMap.setOnMarkerClickListener (OnMarkerClickListener). Lorsqu'un utilisateur clique sur un marqueur, onMarkerClick (Marker) sera appelé et le marqueur sera passé en argument. Cette méthode renvoie un booléen qui indique si vous avez consommé l'événement (c'est-à-dire que vous souhaitez supprimer le comportement par défaut). S'il renvoie false, le comportement par défaut se produira en plus de votre comportement personnalisé. Le comportement par défaut d'un événement de clic de marqueur consiste à afficher sa fenêtre d'informations (si disponible) et à déplacer la caméra de sorte que le marqueur soit centré sur la carte.

https://developers.google.com/maps/documentation/Android/reference/com/google/Android/gms/maps/GoogleMap.OnMarkerClickListener .

Utilisez OnMarkerClickListener sur votre marqueur.

Vérifiez le lien pour les extraits de code

API Google Maps v2: comment rendre les marqueurs cliquables?

Exemple: fonctionne sur mon téléphone

 
 Source de marqueur, destination; 
 GoogleMap mMap; 
 
 MMap = ((MapFragment) getFragmentManager (). FindFragmentById (R.id.map )). getMap (); 
 source = mMap.addMarker (nouvelles options de marqueur () 
 .position (sc) 
 .title ("MyHome") 
. snippet ("Bangalore") 
 .icon (BitmapDescriptorFactory.fromResource (R.drawable.pin))); 
 
 destination = mMap.addMarker (new MarkerOptions () 
 .position (lng) 
 .title ("MapleBear Head Office") 
 .snippet ("Jayanager") 
 .icon (BitmapDescriptorFactory.fromResource (R.drawable.pin ))); 
 
 mMap.setOnMarkerClickListener (marker -> {
 if (marker.getTitle (). equals ("MyHome")) // si la source du marqueur est cliquée 
 Toast.makeText (MainActivity.this, marker.getTitle (), Toast.LENGTH_SHORT) .show (); // afficher le toast 
 Return true; 
}) ; 
 
31
Raghunandan

Ce code gère l'événement de clic du créateur et charge une nouvelle mise en page (XML) avec quelques informations:

/**
 * adding individual markers, displaying text on on marker click on a
 * bubble, action of on marker bubble click
 */
private final void addLocationsToMap() {
    int i = 0;
    for (Stores store : storeList) {
        LatLng l = new LatLng(store.getLatitude(), store.getLongtitude());

        MarkerOptions marker = new MarkerOptions()
                .position(l)
                .title(store.getStoreName())
                .snippet("" + i)
                .icon(BitmapDescriptorFactory
                        .defaultMarker(BitmapDescriptorFactory.HUE_GREEN));
        googleMap.addMarker(marker);
        ++i;
    }

    googleMap.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {

        @Override
        public void onInfoWindowClick(Marker marker) {

            try {
                popUpWindow.setVisibility(View.VISIBLE);
                Stores store = storeList.get(Integer.parseInt(marker
                        .getSnippet()));

                // set details
                email.setText(store.getEmail());
                phoneNo.setText(store.getPhone());
                address.setText(store.getAddress());

                // setting test value to phone number
                tempString = store.getPhone();
                SpannableString spanString = new SpannableString(tempString);
                spanString.setSpan(new UnderlineSpan(), 0,
                        spanString.length(), 0);
                phoneNo.setText(spanString);

                // setting test value to email
                tempStringemail = store.getEmail();

                SpannableString spanString1 = new SpannableString(tempStringemail);
                spanString1.setSpan(new UnderlineSpan(), 0, spanString1.length(), 0);
                email.setText(spanString1);

                storeLat = store.getLatitude();
                storelng = store.getLongtitude();

            } catch (ArrayIndexOutOfBoundsException e) {
                Log.e("ArrayIndexOutOfBoundsException", " Occured");
            }

        }
    });

}
10
TharakaNirmana

Si vous avez besoin de l'événement Click in a market, ce code est la solution.

private GoogleMap mGoogleMap;


mGoogleMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener()
        {

            @Override
            public boolean onMarkerClick(Marker arg0) {
                if(arg0 != null && arg0.getTitle().equals(markerOptions2.getTitle().toString())); // if marker  source is clicked
                    Toast.makeText(menu.this, arg0.getTitle(), Toast.LENGTH_SHORT).show();// display toast
                return true;
            }

        });

bonne chance

6
David Hackro