尽管使用setVisibility(false),折线仍未清除
我们创建了一条多段线数组列表,并在添加新的多段线时将其添加到列表中。但是我们要清除所有折线而不清除地图,因此没有成功。 我们尝试通过折线数组使用setPoints选项,但无法从arraylist检索所需的折线。它总是会出现IndexOutOfBounds错误。
ArrayList<Polyline> polylines=new ArrayList<Polyline>();
ArrayList points = null;
Polyline p=null;
int counter=0;
for (int i = 0; i < result.size(); i++) {
counter++;
points = new ArrayList();
lineOptions = new PolylineOptions();
trial1=new ArrayList<ArrayList<LatLng>>();
List<HashMap<String, String>> path = result.get(i);
for (int j = 0; j < path.size(); j++) {
HashMap<String, String> point = path.get(j);
double lat = Double.parseDouble(point.get("lat"));
double lng = Double.parseDouble(point.get("lng"));
LatLng position = new LatLng(lat, lng);
points.add(position);
}
trial1.add(points);
lineOptions.addAll(points);
lineOptions.width(12);
lineOptions.color(Color.RED);
lineOptions.geodesic(true);
lineOptions.clickable(true);
if(points.size()!=0 && points!=null && lineOptions!=null) {
p = mMap.addPolyline(lineOptions);
polylines.add(p);
}
在主要功能中:
for (int required=0;required<Points.size();required++) {
if(Points.get(required)!=FINAL.get(required)){
polylines.get(required).setVisible(false);
polylines.set(required,null);
}
drawPolylines(Points.get(required));
}
其中FINAL是旧位置,Points是新位置数组。
它总是导致:
java.lang.NullPointerException: Attempt to invoke virtual method 'void com.google.android.gms.maps.model.Polyline.setVisible(boolean)' on a null object reference
另一种尝试是remove()选项。
for(int ccc=0;ccc<polylines.size();ccc++) {
Polyline theta=polylines.get(ccc); //removing all the polylines in the array
theta.remove();
}
polylines.clear();
for (required=0;required<Points.size();required++) {
if(Points.get(required)!=FINAL.get(required))
drawPolylines(Points.get(required)); //drawing polylines again
}
但这并没有清除任何折线,而是重新绘制了现有的折线。
答案 0 :(得分:0)
您可以像下面的
一样在折线对象上调用remove()
假设您这样添加了折线
Polyline polyline = this.mMap.addPolyline(new PolylineOptions().....);
仅通过
删除此折线polyline.remove();
//重画原因可能是
for (int required=0;required<Points.size();required++) {
if(Points.get(required)!=FINAL.get(required)){
polylines.get(required).setVisible(false);
polylines.set(required,null);
}
drawPolylines(Points.get(required)); // you are redrawing polyline here i guess
}