6

我目前正在尝试实现一个 ActionBar-Button,它在使用时将我的 GoogleMap 对象上的所有标记设置为可见或不可见。我的问题是,一旦创建并显示在我的地图上,我不知道如何获得对所有标记的引用。我正在寻找一个解决方案,将我的所有标记对象存储到一个数组中,我也可以在我的代码的其他部分访问它。这种方法合理吗?

这就是我的想法:

 private Marker[] mMarkerArray = null;
 for (int i = 0; i < MainActivity.customers.size(); i++) {

     LatLng location = new LatLng(mData.lat, mData.lng);

     Marker marker = mMap.addMarker(new MarkerOptions().position(location)
                          .title(mData.title)
                          .snippet(mData.snippet));
     mMarkerArray.add(marker);                      
   }

并在另一种方法中设置我所有的标记不可见:

for (int i = 0;  i < mMarkerArray.length;; i++) {
    mMarkerArray[i].setVisible(false);
}

它拒绝将标记添加到 Marker[]-array。我怎样才能实现它?

mMarkerArray.add(标记)不起作用

4

3 回答 3

17

我想出了一个答案,也就是我的 customerList 有没有坐标的客户 --> (0,0;0,0)。受此博客启发。

初始化数组列表:

private ArrayList<Marker> mMarkerArray = new ArrayList<Marker>();

将标记添加到我的地图和 mMarkerArray:

for (int i = 0; i < MainActivity.customers.size(); i++) {
        Customer customer = MainActivity.customers.get(i);
        if (customer.getLon() != 0.0) {
            if (!customer.isProspect()) {
                Data mData= new Data(customer.getLat(),customer.getLon(),customer.getName(),
                        customer.getOrt());

                LatLng location = new LatLng(mData.lat, mData.lng);

                Marker marker = mMap.addMarker(new MarkerOptions().position(location)
                          .title(mData.title)
                          .snippet(mData.snippet));

                mMarkerArray.add(marker); 
}}} 

将所有标记设置为不可见

for (Marker marker : mMarkerArray) {
    marker.setVisible(false);
    //marker.remove(); <-- works too!
}
于 2013-08-08T14:40:05.653 回答
2

代替

private Marker[] mMarkerArray = null;

private List<Marker> mMarkerArray = new ArrayList<Marker>();

你应该没事。

如果您使用Android Maps Extensions,您可以使用简单地遍历所有标记

for (Marker marker : googleMap.getMarkers()) {
    marker.setVisible(false);
}

没有你自己List的所有Markers。

于 2013-08-08T14:29:02.617 回答
1

您可以在or中保留 a Collection,然后调用以使它们“不可见”,然后将它们添加回来以使它们再次可见。在每个操作后调用以重新绘制地图。OverlayItemActivityFragmentMapView.getOverlays().clear()MapView.invalidate()

于 2013-08-08T12:59:56.830 回答