- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
在谷歌地图上,我为不同的目的放置了不同颜色的标记,这里我希望每个标记的 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/
我的问题是,我希望根据markerSet 数组中的名称加载不同的模式,但现在 if/else 每次都会返回相同的模式。 请查看下面我的 JS 中的 if 语句。 name: "Tulsa" 标记应打开
我成功使用 jvectormaps 绘制了 map ,用户单击标记时我会触发警报。 我希望能够在标记数组中添加一个自定义项目,用作记录 ID。有人可以修改下面代码中的 alert(id); 行,以便它
我正在尝试使用 JVectorMap 创建一个 map ,该 map 将在用户单击给定标记后将信息放入 #output div(例如,如果用户单击标记为阿拉斯加的标记,则有关阿拉斯加的事实会弹出在#输
我在使用 onMarkerClick 时遇到了一些问题 基本上,现在我只想在单击之前创建的任何标记时启动相同的 Activity 。后面我会实现对marker的过滤。 我现在得到的是没有错误。单击标记
我有一个 Activity ,其中我从 Firebase 数据库获取数据并在 map 上显示多个标记。在 onMarkerClick 中,我希望用户转到另一个 Activity ,其中包含有关所点击的
我想使用谷歌地图制作标记应用程序,但是。我对使用 switch Case 的 onMarkerClick 有疑问,我正在使用数组将标记添加到我的应用程序,当标记 OnCLick 时,他可以为每个标记调
我正在使用 google map v2,其中有 1000 多个标记是从网络服务中获取的。因此,出于这个原因,我正在使用 map 聚类。我正在显示信息窗口 onMarkerClick 但问题是当用户单击
我上面有 map 和标记。当用户按下此标记或靠近此标记时,我需要做的是应用程序将执行“onMapClick 监听器”并返回点击坐标而不是“onMarkerClick”。是否有可能忽略一个标记的标记点击
我正在尝试在 Android Studio 中创建一个与 Google Maps API 配合使用的 Android 应用程序。我已经成功地将标记添加到 map 上我选择的某个 LatLng 位置。
我将 Google Maps Android API v2 集成到我的应用程序中,但 GoogleMap 中的标记出现了奇怪的行为。InfoWindow 隐藏后不会调用 OnMarkerClickLi
我是一名优秀的程序员,十分优秀!