2012-11-05 26 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