gpt4 book ai didi

android - 如何在android中为不同类型的标记指定onMarkerclick()

转载 作者:太空宇宙 更新时间:2023-11-03 12:19:50 30 4
gpt4 key购买 nike

在谷歌地图上,我为不同的目的放置了不同颜色的标记,这里我希望每个标记的 onMarkerclick() 具有不同的功能(例如:所有绿色标记)。如何为此设置条件。这是我的代码创建一组标记

@Override
public void onMapLongClick(LatLng touchlocation) {
// TODO Auto-generated method stub
googleMap.addMarker(new MarkerOptions()
.position(touchlocation)
.title("Event")
.icon(BitmapDescriptorFactory
.defaultMarker(BitmapDescriptorFactory.HUE_GREEN)));
}

这是另一种标记

// adding marker
user_marker = googleMap.addMarker(new MarkerOptions()
.position(USER_LOCATION)
.title("User")
.snippet("User registered Location:" + loc)
.icon(BitmapDescriptorFactory
.defaultMarker(BitmapDescriptorFactory.HUE_ROSE)));

对于附近的地方,我正在使用另一种类型的标记

这里是我如何实现 onMarkerClick()

@Override
public boolean onMarkerClick(Marker marker) {
// TODO Auto-generated method stub
// googleMap.clear();
Toast.makeText(getApplicationContext(), "USER MARKER",
Toast.LENGTH_LONG).show();
showDialog(DIALOG_LOGIN);

return true;
}

这里我想要每种标记的不同功能,如何为此编写条件。帮助我。

最佳答案

有几种方法可以做到这一点。

如果你所有的 Marker 都有一个你可以区分的值(例如标题),你可以这样做:

String title = marker.getTitle();
if ("User".equals(title)) {
// show dialog
} else if ("Event".equals(title)) {
// do thing for events
} else {
// do thing for nearby places
}

fragment 可用于此目的,但如果您不想显示像 "USER" 这样的 fragment ,则必须注意创建信息窗口 View"EVENT""NEARBY_PLACE" 常量。

一种更通用的方法是将所有的 Marker 存储在 Set 中(或者如果您想将附加值分配给 Map每个标记):

private Set<Marker> events;
private Set<Marker> nearbyPlaces;

然后检查点击的 Marker 是否在这些集合中:

if (user_marker.equals(marker)) {
// show dialog
} else if (events.contains(marker)) {
// do thing for events
} else if (nearbyPlaces.contains(marker)) {
// do thing for nearby places
} else {
// something is wrong, better call police (assuming there are only 3 kinds of markers)
}

最后但同样重要的是,您可以使用 Android Maps Extensions删除难看的 if 语句。

为每个 Marker 类型创建一个 OnMarkerClickListener,例如:

private OnMarkerClickListener userMarkerClickListener = new OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
// show dialog
return true;
}
};

private OnMarkerClickListener eventMarkerClickListener = new OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
// do thing for events
return false;
}
};

在创建给定类型的 Marker 时,分配点击监听器:

user_marker.setData(userMarkerClickListener);

在添加到 GoogleMap 对象调用的全局 OnMarkerClickListener 中:

@Override
public boolean onMarkerClick(Marker marker) {
OnMarkerClickListener listener = (OnMarkerClickListener) marker.getData();
return listener.onMarkerClick(marker);
}

如果您只有 3 种 Marker,我会选择第二个选项,因为它简单且健壮。如果超过 5 个或将来可能会更改,则使用第三个选项创建的面向对象代码将更易于维护恕我直言。

关于android - 如何在android中为不同类型的标记指定onMarkerclick(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19191206/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com