2017-10-04 104 views
0

我已经使用数据库动态创建带有多个标记的Google Map,现在任何人都可以建议我如何单独创建每个标记的点击事件?如何处理Google地图标记点击?

+0

您打算通过单击标记来执行什么事件?小改动都一样吗?他们喜欢打开你的应用程序的活动吗? –

+0

我想在每个标记点击事件上打开一个新的活动,它将显示为一个对话框。 –

回答

0

你可以这样做

private Marker marker1; 
    marker1 = mMap.addMarker(new MarkerOptions() 
        .position(LatLng(-31.952854, 115.857342)) 
        .title("Title"); 
      marker1.setTag(0); 

    mMap.setOnMarkerClickListener(this); 

,并在实施监听的

@Override 
    public boolean onMarkerClick(final Marker marker) { 
     //marker.getTag() 
    } 
0

使用此为多个标记:

首先让你的应用程序来实现GoogleMap.OnMarkerClickListener然后创建一个标记阵列:

Marker[] marker = new Marker[20]; //change length of array according to you 

然后里面

onMapReady(){ 
    mMap.setOnMarkerClickListener(this); 
for(int i = 0 ; i < yourMarkerListsize ; i++) { 
     marker[i] = mMap.addMarker(new MarkerOptions() 
     .position(new LatLng(list(i).getLat(), list(i).getLon()) 
     .anchor(0.5f, 0.5f) 
     .title(title) 
     .snippet(snippet) 
     .icon(yourIcon)); 
    } 

然后最后

@Override 
    public boolean onMarkerClick(Marker marker) { 
    //you can get assests of the clicked marker 
    return false; 
} 

希望它可以帮助!

+0

谢谢你的建议,但我需要一个使用Xamarin而不是Java的C#代码,它是一个Java代码。 –

0

如果你正在寻找的这个Xamarin代码,以下是你如何做到这一点

GoogleMaps Gmap;            

GMap.MarkerClick += GMap_MarkerClick; 
GMap.InfoWindowClick += GMap_InfoWindowClick; 

private void GMap_MarkerClick(object sender, GoogleMap.MarkerClickEventArgs e) 
    { 
     Marker marker = e.Marker; 
     marker.ShowInfoWindow(); 
    } 
private void GMap_InfoWindowClick(object sender, GoogleMap.InfoWindowClickEventArgs e) 
    { 

    } 

这是你如何处理xamarin Android的希望都标记和标记信息的窗口中点击事件这可以帮助你。

+0

谢谢您的建议,但您的代码只有一个标记值,这是我已经完成的。使用下面的代码 MarkerOptions options = new MarkerOptions()。SetPosition(latlng).SetTitle(dt.Rows [i] [“rating”]。ToString()+“:Click to request”); GMap.AddMarker(options); GMap.AddMarker(options); GMap = googleMap; –

+0

所以你想要一个代码插入多个标记我想!? @PrashantBhatt –

+0

是的,我们的谷歌地图屏幕中有多个标记,我们希望所有标记都有单独的标记点击事件。标记位置从数据库中设置,并使用FOR循环显示在地图上。 –

0

我觉得下面的方法可以帮助你:

正如其他人所说,你可以设置一个OnMarkerClickListener到标记,以对标记点击事件,并使用URL添加发射活动,是指here。 因此,您可以将活动网址存储在数据库中。 当动态创建标记时,维护其关键将为Marker类的对象的映射,并且值将为String的URL。

如此,里面onMarkerClick()方法:

@Override 
public boolean onMarkerClick(Marker marker) { 
    String activityUrl = markerURLMap.get(marker); 
    Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(activityUrl)); 
    startActivity(intent); 
} 
0

为了安装每点击标记唯一的网址,你需要如下附加您内Marker.Tag标签的对象:

UrlObject url = new UrlObject() 
       { 
        Url = "enteryoururlhere" 
       }; 
marker.Tag = UrlObject; 

然后,您将通过呼叫以下内容获取每个标记唯一的网址:

public boolean onMarkerClick(Marker marker) { 
     UrlObject obj = marker.Tag; 
     String activityUrl = obj.Url; 
     Intent intent = new Intent(Intent.ACTION_VIEW, 
     Uri.parse(activityUrl)); 
     startActivity(intent); 
    } 

你UrlObject类将是易于安装:

class UrlObject : Java.Lang.Object 
    { 
      public string Url { get; set; } 
    } 

编辑:你会做标记,在你的每一个循环的标记。这样,当每个标记被创建时,它都被正确地标记为每个url。

相关问题