2014-09-22 84 views
0

因此,此功能旨在從視圖列表中刪除Unit對象及其相應的視圖。然後它檢查剩餘的單位,如果先前移除的單位是另一個單位的先決條件,則它會遞歸併移除該單位,依此類推。
單位已從存儲中正確移除,並顯示在待處理的顯示中,但並非所有已移除單位的視圖都從「temp」中移除。

編輯:當每個學期最多有一個單元時,該功能完全起作用,但是否則會使其他東西落後。

任何洞察力,你可以提供爲什麼這是發生的將非常感激。視圖不按預期方式移除

void removeLinkedUnits(Unit inUnit) 
{ 
    int sem; 
    for(sem = semesters.size() - 1; sem >= 0; sem--) //iterate through each semester containing units 
    { 
     int unit; 
     for(unit = semesters.get(sem).getUnits().size() - 1; unit >= 0; unit--) //iterate through each unit in a semester 
     { 
      String[] pres = semesters.get(sem).getUnit(unit).getPrerequisites(); 
      int i; 
      boolean toRemove = false; 
      for(i = 0; i < pres.length; i++) //Compare list of pre-requisites against removed unit. 
      { 
       if(pres[i].contains(inUnit.getUnitID())) 
       { 
        toRemove = true; 
       } 
      } 
      if(semesters.get(sem).getUnits().get(unit).getCorequisites().contains(inUnit.getUnitID())) 
      { 
       toRemove = true; 
      } 
      if(toRemove) //Unit relies on previously removed unit 
      { 
       Unit unitx = semesters.get(sem).getUnit(unit); 
       semesters.get(sem).remove(unitx); 
       LinearLayout temp = vertUnitLayouts.get(sem); 
       temp.removeViewAt(unit); 
       scheduledUnits.remove(unitx.getUnitID()); 
       removeLinkedUnits(unitx); 
       redrawPendingSpinners(); 
       pendingUnits.add(unitx); 
       LinearLayout pendingLinear = (LinearLayout) findViewById(R.id.pendingLinear); 
       pendingLinear.addView(makePendingView(unitx)); 
      } 
     } 
    } 
} 
+0

嘗試調用requestLayout()或無效()在刪除單元對象之後.. – Sripathi 2014-09-22 12:57:57

+0

似乎沒有任何效果。 – Grid32 2014-09-22 13:08:20

+0

你能否確認我已經調用了父視圖的requestLayout()或invalidate()?並在循環之後調用其中一種方法? – Sripathi 2014-09-22 13:14:01

回答

0

找出問題所在。 temp(vertUnitsLayout)包含每個單元2項,而不是我期待的1。誤解了我的搭檔如何構建他的觀點。 我需要使用調試器的更多:S


替換:

temp.removeViewAt(unit); 

有了:

temp.removeViewAt(unit*2); 
    temp.removeViewAt(unit*2);