我有一个像Marker marker_array[];
这样的全局数组对象,稍后在布局中点击我将其初始化为marker_array = new Marker[8];
。我想添加标记以在该布局上进行映射,并在第二次单击时删除,因此我创建了clickcount
全局变量,其值为零。
我的正确代码在这里
final RelativeLayout layout = (RelativeLayout) findViewById(R.id.track_div);
layout.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
clickcount++;
point_new = new LatLng[8];
point_new[0] = new LatLng(31.5301843, 74.3207487);
point_new[1] = new LatLng(31.5214693,74.3236027);
point_new[2] = new LatLng(31.5194393, 74.3257327);
point_new[3] = new LatLng(31.4942166, 74.3004533);
point_new[4] = new LatLng(31.4864646, 74.2911203);
point_new[5] = new LatLng(31.4803596, 74.2787933);
point_new[6] = new LatLng(31.4764716, 74.2638203);
point_new[7] = new LatLng(31.4775236, 74.2628873);
// initialize marker_array;
marker_array = new Marker[8];
Toast.makeText(getApplicationContext(), "count "+clickcount, Toast.LENGTH_SHORT).show();
//
if (clickcount % 2 == 0) {
polyline.setVisible(false);
for (int i = 0; i < point_new.length; i++){
Toast.makeText(getApplicationContext(), "marker length ="+marker_array.length, Toast.LENGTH_SHORT).show();
marker_array[i].remove();
// marker_array.setVisible(false);
}
} else {
polyline.setVisible(true);
for (int i = 0; i < point_new.length; i++) {
// marker_array = new Marker[point_new.length];
MarkerOptions markerOptions = new MarkerOptions()
.position(point_new[i]);
marker_array[i] = mMap.addMarker(markerOptions);
marker_array[i].setTitle("Points");
marker_array[i].setSnippet("Distance = 9.6 km, Time = 20 minute/s");
marker_array[i].setIcon(BitmapDescriptorFactory.fromResource(R.drawable.bus));
}
}
问题在于它会创建所有8个标记但是不会删除,即使在我尝试删除标记的情况下Toast
显示正确的长度8
。 对接当我单独删除任何marker_array
marker_array[7]
时会将其删除。
如何在不使用map.clear();
方法的情况下删除 marker_array 中的所有标记,因为我还有一些其他内容,例如我不想删除的折线等。
任何努力都将不胜感激。
答案 0 :(得分:6)
使用此选项添加标记
全球
List<Marker> mMarkers = new ArrayList<Marker>();
在你的for循环中,将标记添加到此列表中,如
for (int i = 0; i < point_new.length; i++) {
MarkerOptions markerOptions = new MarkerOptions();
markerOptions.position(point_new[i]);
Marker marker = mMap.addMarker(markerOptions);
marker.setTitle("Point");
marker.setSnippet("this is snippet");
marker.setIcon(BitmapDescriptorFactory.fromResource(R.drawable.p));
mMarkers.add(marker); // <-- Like this
}
和删除标记 p>
private void removeMarkers() {
for (Marker marker: mMarkers) {
marker.remove();
}
mMarkers.clear();
}
希望它会有所帮助。
答案 1 :(得分:2)
试试这个,
private ArrayList<Marker> mMarkers;
...
private void removeMarkers() {
for (Marker marker: mMarkers) {
marker.remove();
}
mMarkers.clear();
}
答案 2 :(得分:1)
addMarker
的方法签名是:
public final Marker addMarker (MarkerOptions options)
因此,当您通过指定标记的选项向GoogleMap
添加标记时,应保存返回的Marker
对象(而不是您使用的MarkerOptions
对象创造它)。此对象允许您稍后更改标记状态。完成标记后,您可以调用Marker.remove()
将其从地图中删除。
另外,如果您只是想暂时隐藏它,可以通过调用Marker.setVisible(boolean)
来切换标记的可见性。