fil*_*ehd 11 java android google-maps google-maps-markers
对于Android,我正在使用Google地图制作应用程序.我的屏幕上有很多标记,当我们点击它时,我正在为每个标记准备可定制的气球.这意味着,根据点击的标记,我有不同的信息.
我用setInfoWindowAdapter设置了标记视图的内容,然后重写方法getInfoContents.
问题是:此方法是信息窗口内容的一般实现,但每个标记应显示自己的信息.所以,据我所知,我必须以某种方式检测getInfoContents(标记标记)已经点击了哪些标记,以便从我的数据结构加载必要的信息以呈现在信息窗口上.问题是:如何识别点击的标记'标记'代表什么实体?我的意思是,只有getInfoContents上的对象标记被触发以显示信息窗口,我如何检测哪个是要显示的正确信息?我虽然通过使用marker.getTitle()来比较字符串Title,但这迫使我在信息窗口上显示一个我不想要的标题.还有一个marker.getId(),但这样的ID是由API生成的,我无法控制它
有任何想法吗?
vog*_*Dev 22
回复:
问题是:如何识别点击的标记'标记'代表什么实体?[...]还有一个marker.getId(),但这样的ID是由API生成的,我无法控制它
你可以控制它.标记由addMarker()返回,因此您可以获取其ID并存储它.这是代码:
Map <String, Integer> markers = new HashMap<String, Integer>();
Run Code Online (Sandbox Code Playgroud)
...
MarkerOptions mo = new MarkerOptions()
.icon(BitmapDescriptorFactory.fromResource(R.drawable.my_marker))
.position(new LatLng(mLat, mLon))
.flat(true)
.snippet("Click here for details")
.rotation(0)
.title(title);
Run Code Online (Sandbox Code Playgroud)
将标记添加到地图时,将其ID存储在容器中
MyClass myObject = new MyClass(lat, lon); // The class that you are rendering on the map with Markers, for example "Monument"
Marker mkr = map.addMarker(mo);
markers.put(mkr.getId(), myObject.getId());
Run Code Online (Sandbox Code Playgroud)
然后,当单击标记时,您可以像这样恢复"myObject"的id
map.setOnInfoWindowClickListener(new OnInfoWindowClickListener() {
public void onInfoWindowClick(Marker marker) {
int id = markers.get(marker.getId());
// Now id contains which Monument (or your preferred class) was clicked
}
});
Run Code Online (Sandbox Code Playgroud)
有一个更好的选择,这就是谷歌建议的:
Tag:
Object与标记关联的。例如,Object可以包含有关标记所代表内容的数据。这比存储单独的Map<Marker, Object>. 再例如,您可以关联String与数据集中的 ID 相对应的 ID。Google Maps Android API 既不读取也不写入此属性。
所以你可以这样做:
for (ListItem it: mList) {
Marker mk = mMap.addMarker(new MarkerOptions().position(it.getLatLng()).title(it.getName()).snippet(it.getAddress()));
mk.setTag(it.getID());
}
mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
Integer id = (Integer) marker.getTag();
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
试试这个代码:
@Override
public void onInfoWindowClick(final Marker marker)
{
// TODO Auto-generated method stub
if (marker.getTitle().equalsIgnoreCase("Start")) {
Toast.makeText(showMaps.this, "You have click on start -->",
Toast.LENGTH_LONG).show();
Log.e("marker.getPosition()-->", "" + marker.getPosition());
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
12603 次 |
| 最近记录: |