因此,此函数旨在从视图列表中删除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 :(得分:0)
找出问题所在。 temp(vertUnitsLayout)每个单元包含2个项目,而不是我期望的1个项目。误解了我的伴侣如何构建他的观点。 我需要更多地使用调试器:S
替换:
temp.removeViewAt(unit);
使用:
temp.removeViewAt(unit*2);
temp.removeViewAt(unit*2);