我的Google地图活动中有一些标记表示某些商店位置。我需要为每个标记写点击事件,这样我就可以为每个商店打开相应的网站。我使用以下代码添加标记。
public void onMapReady(GoogleMap googleMap) {
mMap = googleMap;
for(int i = 0 ; i < shop.size() ; i++ ) {
createMarker(shop.get(i).getLat(), shop.get(i).getLon(), shop.get(i).getShopname(),"", R.drawable.ic_location_city);
}
mMap.setOnMarkerClickListener(ShoppingPage.this);
}
protected Marker createMarker(double latitude, double longitude, String title, String snippet, int iconResID) {
mMap.animateCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(latitude, longitude), 9f));
myMarker = mMap.addMarker(new MarkerOptions()
.position(new LatLng(latitude, longitude))
.anchor(0.5f, 0.5f)
.title(title)
.snippet(snippet)
.icon(BitmapDescriptorFactory.fromResource(R.drawable.ic_location_city_black_24dp)));
return myMarker;
}
当我尝试向标记添加点击监听器时,我无法向所有标记添加点击监听器。我只能将点击事件添加到最后添加的标记。但我需要为地图中的每个标记制作点击事件。请帮我。这是我点击事件的代码。
public boolean onMarkerClick(final Marker marker) {
if (marker.equals(myMarker))
{
//handle click here
Log.d("title",""+ marker.getTitle());
Log.d("position",""+ marker.getPosition());
}
return true;
}
答案 0 :(得分:1)
在onMarkerClick(...)中, &#34; if(marker.equals(myMarker))&#34; 意味着onMarkerClick只为myMarker做任何事情 myMarker引用最后创建的标记,因为每当调用createMarker时它都会被覆盖。 所以建议删除&#34; if(marker.equals(myMarker))&#34;
答案 1 :(得分:1)
使用此:
首先让你的应用实现GoogleMap.OnMarkerClickListener然后创建一个Marker数组:
Marker[] marker = new Marker[20]; //change length of array according to you
然后在里面
onMapReady(){
mMap.setOnMarkerClickListener(this);
for(int i = 0 ; i < shop.size() ; i++ ) {
marker[i] = createMarker(shop.get(i).getLat(), shop.get(i).getLon(), shop.get(i).getShopname(),"", R.drawable.ic_location_city);
}
然后终于
@Override
public boolean onMarkerClick(Marker marker) {
//you can get assests of the clicked marker
return false;
}
希望它有所帮助!!!
答案 2 :(得分:0)
这是错误的:
public boolean onMarkerClick(final Marker marker) {
if (marker.equals(myMarker))
{
//handle click here
Log.d("title",""+ marker.getTitle());
Log.d("position",""+ marker.getPosition());
}
return true;
}
应该是:
public boolean onMarkerClick(final Marker marker) {
return true;
}
marker
变量表示点击了哪个标记。顺便说一句,你的问题是毫无意义的,你可以先设置断点,如果发现你错了,那么对所有标记都有反应。
另外,我会喜欢这样的事情:
googleMap.setOnMarkerClickListener(marker ->
{
/*Do what you need with clicked marker*/
return true;
});
答案 3 :(得分:0)
为每个标记添加OnClickListener
.setOnClickListener(getOnClickAction());
而不是处理点击的OnClickListener。
View.OnClickListener getOnClickAction(){
return new View.OnClickListener(){
public void onClick(View v){
//Handle Click
v.getTitle(position);
}
};
}
答案 4 :(得分:0)
基本上 setOnMarkerClickListner 检测到您单击了哪个标记。
如果您没有为标记设置任何标题,我有一种方法可以识别单击了哪个标记。
首先,创建一个标记地图,以标记对象为键,标记名称为值。
private Map<Marker, String> markerMap = new HashMap<>();
然后,将所需的标记添加到 Map 对象。
marker = gMap.addMarker(new MarkerOptions()
.position(new LatLng(latitude, longitude))
.icon(BitmapDescriptorFactory.defaultMarker(BitmapDescriptorFactory.HUE_BLUE)));
markerMap.put(marker,gymDataHolder.getTitle());
然后,使用 setOnMarkerClickListner
map.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
Toast.makeText(context, markerMap.get(marker), Toast.LENGTH_SHORT).show();
return true;
}
});
答案 5 :(得分:0)
在向地图添加标记时,您可以像这样在商店中为每个标记设置标记
marker= mGoogleMap!!.addMarker(MarkerOptions().position(latLng)
.title(user.name)
.icon({Your shop icon})
marker.tag=shop
然后您可以实现标记点击侦听器
override fun onMarkerClick(p0: Marker?): Boolean {
if(p0?.tag==null) return false
var shop=(p0?.tag) as Shop
Toast.makeText(context,shop?.name,Toast.LENGTH_SHORT).show()
return true
}