2012-11-05 27 views
0

在以下循环是一个列表迭代通过,并在画布上绘制每个项目。然而,随着循环的进展,我相信以前的引用被破坏了。我如何为循环的每次运行创建一个唯一的实例?虽然循环没有破坏以前的参考

  //Draw AR markers in reverse order since the last drawn should be the closest 
     ListIterator<Marker> iter = collection.listIterator(collection.size()); 
     while (iter.hasPrevious()) { 
      Marker marker = iter.previous(); 
      marker.draw(canvas); 
     } 

我试过以下,但无济于事。循环到达第二个项目,然后有一个NoSuchElementException。

 while (iter.hasPrevious()) { 
     int i = 0; 
     try { 

      Marker marker = iter.previous(); 
      marker.draw(canvas); 
      ++i; 
      System.out.println("Item number 1 " + i); 
      Marker marker1 = iter.next(); 
      marker1.draw(canvas); 
      ++i; 
      ... repeated up to marker7 then catching the NoSuchElementException. 
+4

你第一次正在做你想做的。它不会覆盖以前的参考,但会在每次迭代中创建一个新参考。你想要它做什么? –

+0

@RohitJain一旦所有东西都画到画布上,我就截取当前画布上的所有内容。只有第一个标记出现在屏幕上,供用户使用 - 但是它们似乎不出现在实际画布上以便在屏幕截图中捕获。 – KDEx

+0

你如何填充你的'List'?这是你可能遇到的问题的根源。 –

回答

1

这不是问题。

您并未创建新的Marker对象,只需从可迭代的Collection中读取即可。原始集合(可能还有其他对象)包含对正在循环的对象的引用,所以它们不会被销毁。

您的第二个代码只在循环开始时检查iter.hasPrevious(),但它正在执行许多操作。如果Collection/iterator中没有足够的元素,那么在尝试达到不存在的元素(例如,在iter到达第一个元素之后执行iter.previous())时会出现该异常。

+0

谢谢你澄清问题。你完全正确。在另一节中,我正在清除缓存以提高性能,但这也意味着从画布上擦除一些标记。 – KDEx