2014-09-22 62 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);