2014-09-22 3 views
0

이 함수는 Unit 개체와 해당 뷰를 뷰 목록에서 제거하기위한 것입니다. 그런 다음 나머지 유닛을 검사하고 이전에 제거 된 유닛이 다른 유닛의 전제 조건 이었으면 해당 유닛을 되풀이하고 제거합니다.
유닛이 스토리지에서 올바르게 제거되고 보류중인 디스플레이에 다시 표시되지만 제거 된 유닛의 모든보기가 "임시"에서 제거되지는 않습니다.

편집 :이 기능은 각 학기에 최대 한 개의 단위가있을 때 완전히 작동하지만 그렇지 않은 경우는 남겨 둡니다.

왜 이런 일이 발생했는지 알 수있는 통찰력이 있으면 대단히 감사하겠습니다.예상대로 제거되지 않는 뷰

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

+0

어느 쪽도 효과가없는 것으로 보입니다. – Grid32

+0

부모보기의 requestLayout() 또는 invalidate()를 호출했음을 확인할 수 있습니까? 그리고 루프 이후에 이러한 메소드 중 하나를 호출 했습니까? – Sripathi

답변

0

이 문제를 파악했습니다. temp (vertUnitsLayout)에는 예상 한 것이 아닌 Unit 당 2 개의 항목이 포함되어 있습니다. 내 파트너가 자신의 견해를 어떻게 구성하고 있는지 오해했습니다. 는 좀 더 디버거를 사용할 필요가 : S 대체


:와

temp.removeViewAt(unit); 

: 당신이 단위 개체를 제거 후

temp.removeViewAt(unit*2); 
    temp.removeViewAt(unit*2); 
관련 문제