2016-04-21 30 views
0

我需要在RelativeLayout裏面找到所有的TextView,對於這個,我使用for(;;)循環,但是面對奇怪的問題,循環並沒有全部刪除視圖。如果佈局有2個孩子,則1個將被刪除,1個將保留。有時候,循環會刪除所有的TextView,但是在下一次使用leave 1的時候。Loop不會從RelativeLayout中刪除所有需要的視圖

這裏是我的代碼:

  int viewCount = relativeLayout.getChildCount(); 

      for (int i1=0; i1 < viewCount ; i1++){ 
       if (relativeLayout.getChildAt(i1) instanceof TextView) { 
        relativeLayout.removeViewAt(i1); 
       } 
      } 

編輯:

這裏是右環:

while (viewCount != -1){ 
       if (relativeLayout.getChildAt(viewCount) instanceof TextView) { 
        relativeLayout.removeViewAt(viewCount); 
       } 
       viewCount--; 
      } 

回答

3

的問題是,在RelativeLayout的兒童的名單縮小爲你刪除視圖,而你沒有考慮到這一點。

比方說,我的RelativeLayout有兩個孩子,我用你的for循環來刪除它們。

  1. 在第一次迭代中,我刪除第一個孩子(在索引0)。
  2. 我的RelativeLayout現在有一個孩子。第二個孩子現在是在索引1,因爲兒童的名單長度1
  3. 循環迭代索引1
  4. 我打電話relativeLayout.getChildAt(1),這是空列表,因爲唯一的孩子是在位置0。第二個孩子不會被刪除。

這個問題有多種解決方案。一個常見的方法是向後遍歷兒童列表,以便始終只刪除最後一個項目。

相關問題