在GoogleMap上填充图钉并在点击每个图钉项目时打开活动

时间:2017-09-11 18:22:14

标签: android google-maps google-maps-api-3 google-maps-markers

我有记录列表,其中每条记录都有自己的纬度和经度。 基于这些lat和long,我需要在地图上显示这些记录作为引脚。

这是我在地图上显示记录的代码:

private GoogleMap mMap;
List<Ticket> tickets = ticketDB.getMyTickets(ticketIDs, mCurrSortKey, mCurrSortOrder, currDate);
    if (mMap != null) {

        LatLngBounds.Builder bounds = new LatLngBounds.Builder();

        for (int i = 0; i < tickets.size(); i++) {
            Ticket ticket = tickets.get(i);
            if (ticket != null && ticket.Latitude > 0) {
                MarkerOptions markerOptions = new MarkerOptions();
                markerOptions.position(new LatLng(ticket.Latitude, ticket.Longitude));
                bounds.include(new LatLng(ticket.Latitude, ticket.Longitude));
                markerOptions.title(ticket.TicketNumber);
                mMap.addMarker(markerOptions);
                mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(markerOptions.getPosition(),15));
 } 
}

此处,所有故障单记录都是从数据库中提取的,并且已在地图上成功标记。(假设有10张票,标记上有10个引脚)

我的问题是点击我需要发送点击记录数据的每个标记来打开活动。如何知道点击哪条记录?

2 个答案:

答案 0 :(得分:0)

实施GoogleMap.OnMarkerClickListener。

@Override
public boolean onMarkerClick(Marker marker) {
    marker.getSnippet();
    marker.getTitle();
    marker.setDraggable(true);
    return false;
}

在标记实例下的给定函数中,您可以获得与单击标记相关的所有内容。

答案 1 :(得分:0)

我通过将Google Play服务更新为

解决了这个问题
compile 'com.google.android.gms:play-services:9.4.0'

GoogleMap提供了getTag()和setTag()方法,以便通过上述更新来实现。

并实现OnMapReadyCallback方法。

@Override
public void onMapReady(GoogleMap googleMap) {
    GoogleMap mMap = googleMap;
}

在onCreate()中添加getMapAsync(this)。

现在我可以在上面的循环代码中使用getTag将数据设置为标记。

Marker marker = mMap.addMarker(markerOptions);
marker.setTag(ticket);

可以通过以下方式获取:

mMap.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {
            @Override
            public void onInfoWindowClick(Marker marker) {
                Ticket ticket = (Ticket) marker.getTag();

} }