2013-08-21 5 views
1

Я исправил свою проблему, мой вопрос в том, почему этот код оставляет сегменты старой полилинии.Почему эта полилиния Google Maps не удаляется?

Примечание: ломаная является Список типа 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

Вы в настоящее время удаления любой другой элемент.

Когда вы удаляете элемент 0, все остальное «сдвигается» так, что есть новый элемент 0 ... но вы оставляете это в покое и переходите к элементу 1 (который имеет значение, которое элемент 2 использовал для иметь).

Варианты:

  • Всегда отсоединяйте от начала, только с время цикла:

    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); 
    } 
    
  • вызовов удалить в каждой строке и затем очистите коллекцию, как вы делаете во втором фрагменте

  • То же самое, но с расширенным циклом:

    for (LatLng point : polyline) 
    { 
        point.remove(); 
    } 
    polyline.clear(); 
    
+0

@ MaciejGórski: Возможно, что этот вопрос не так, но это явно говорит: «ломаный является списком типа LatLng» –

+0

Да, извините. Я заметил это заявление после редактирования. И да, это неправильно. Должен ли я отредактировать его обратно? –

+0

@ MaciejGórski: Отбросит это. –

Смежные вопросы