2

我已经解决了我的问题,我的问题是为什么这段代码会留下旧折线段。

注意:折线是一个 LatLng 类型的列表

for (int i = 0; i < polyline.size(); ++i)
    {
        polyline.get(i).remove();
        polyline.remove(i);
    }

但是如果我删除 polyline.remove(i) (删除列表元素),它会按预期工作。这里发生了什么?这对我来说没有意义,因为 polyline.remove(i); 在实际移除折线之后发生,所以我希望它不会以任何方式影响它。

for (int i = 0; i < polyline.size(); ++i)
    {
        polyline.get(i).remove();
    }
    polyline.clear()
4

1 回答 1

4

您当前正在删除所有其他元素

当您删除元素 0 时,其他所有内容都会“移动”,因此会有一个新元素 0……但您将不理会它,并继续移动到元素 1(它具有元素 2 曾经具有的值)。

选项:

  • 总是从头开始删除,只需要一个while循环:

    while (polyline.size() > 0)
    {
        polyline.get(0).remove();
        polyline.remove(0);
    }
    
  • 从最后删除

    for (int i = polyline.size() - 1; i >= 0; i--)
    {
        polyline.get(i).remove();
        polyline.remove(i);
    }
    
  • 在每一行上调用 remove ,然后像在第二个片段中所做的那样清除集合

  • 相同,但具有增强的 for 循环:

    for (LatLng point : polyline)
    {
        point.remove();
    }
    polyline.clear();
    
于 2013-08-21T19:55:31.957 回答