【发布时间】:2016-09-30 03:32:53
【问题描述】:
我正在开发一个需要在地图上显示标记的 android 应用程序,因为我正在使用具有聚类功能的谷歌地图。我已经从官方开发者网站下载了一个演示样本。它具有显示标记簇的代码,以及在特定簇上触发点击事件的方法。这是我的代码:
public class ClusteringDemoActivity extends BaseDemoActivity implements ClusterManager.OnClusterClickListener<MyItem> {
private ClusterManager<MyItem> mClusterManager;
private ArrayList<My_Lat_Lng> list = new ArrayList<My_Lat_Lng>();
private My_Lat_Lng my_lat_lng = null;
private GoogleMap mMap = null;
@Override
protected void startDemo() {
mMap = getMap();
mMap.moveCamera(CameraUpdateFactory.newLatLngZoom(new LatLng(21.0000, 78.0000), 1));
mClusterManager = new ClusterManager<MyItem>(this, mMap);
mMap.setOnCameraChangeListener(mClusterManager);
mMap.setOnInfoWindowClickListener(mClusterManager.getMarkerManager());
mMap.setInfoWindowAdapter(mClusterManager.getMarkerManager());
mMap.setOnMarkerClickListener(mClusterManager);
try {
readItems();
} catch (JSONException e) {
Toast.makeText(this, "Problem reading list of markers.", Toast.LENGTH_LONG).show();
}
mClusterManager.setOnClusterClickListener(this);
mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() {
@Override
public boolean onMarkerClick(Marker marker) {
LatLng latlng = marker.getPosition();
//Toast.makeText(getApplicationContext(), "" + latlng.toString(), Toast.LENGTH_LONG).show();
return false;
}
});
}
private void readItems() throws JSONException {
//InputStream inputStream = getResources().openRawResource(R.raw.radar_search);
//List<MyItem> items = new MyItemReader().read(inputStream);
loadArrayList();
List<MyItem> items = new MyItemReader().read_Lat_Lng(list);
mClusterManager.addItems(items);
}
private void loadArrayList() {
my_lat_lng = new My_Lat_Lng("51.5145160", "-0.1270060");
list.add(my_lat_lng);
my_lat_lng = new My_Lat_Lng("51.5064490", "-0.1244260");
list.add(my_lat_lng);
my_lat_lng = new My_Lat_Lng("51.5097080", "-0.1200450");
list.add(my_lat_lng);
my_lat_lng = new My_Lat_Lng("51.5090680", "-0.1421420");
list.add(my_lat_lng);
my_lat_lng = new My_Lat_Lng("51.4976080", "-0.1456320");
list.add(my_lat_lng);
my_lat_lng = new My_Lat_Lng("51.5046150", "-0.1473780");
list.add(my_lat_lng);
my_lat_lng = new My_Lat_Lng("51.5077540", "-0.1378760");
list.add(my_lat_lng);
my_lat_lng = new My_Lat_Lng("51.5074250", "-0.1323230");
list.add(my_lat_lng);
my_lat_lng = new My_Lat_Lng("51.5070030", "-0.125560");
list.add(my_lat_lng);
my_lat_lng = new My_Lat_Lng("51.5061590", "-0.140280");
list.add(my_lat_lng);
my_lat_lng = new My_Lat_Lng("51.5047420", "-0.1470490");
list.add(my_lat_lng);
my_lat_lng = new My_Lat_Lng("51.5126760", "-0.1189760");
list.add(my_lat_lng);
my_lat_lng = new My_Lat_Lng("51.5108480", "-0.1208480");
list.add(my_lat_lng);
}
@Override
public boolean onClusterClick(Cluster<MyItem> cluster) {
Toast.makeToast(getApplicationContext(),"click",Toast.LENGTH_LONG).show();
return true;
}
}
在调试上述代码时,onClusterClick 事件未触发。我无法理解原因,请提供一些帮助。
【问题讨论】:
-
尝试拨打
mMap.setOnMarkerClickListener()....可能会拦截点击事件。 -
是的,我正在点击集群
-
这是你删除的那个吗?
mMap.setOnMarkerClickListener(new GoogleMap.OnMarkerClickListener() -
是的,我已经删除了相同的
-
onCreate() 在哪里?
startDemo()是来自BaseDemoActivity()的自定义方法吗?使用getMapAsync()可能更好,因为getMap()已被弃用。
标签: android google-maps