2010-08-17 5 views
1

데이터 공급자가 변경 될 때 모든 자식을 표시하도록 동적으로 크기가 조정되는 Flex에서 중첩 목록을 만들려고합니다. 항목이 추가 될 때중첩 된 크기 조정 mx : 모든 목록 항목을 표시하는 목록

<mx:Script> 
    <![CDATA[ 
     import mx.collections.ArrayCollection; 

     [Bindable] 
     public var outer:ArrayCollection = new ArrayCollection(["one", "two", "three"]); 

     [Bindable] 
     public var inner:ArrayCollection = new ArrayCollection([]); 

     public function addInnerListItems() : void { 
      inner.addItem("fish"); 
      inner.addItem("mice"); 
      inner.addItem("cats"); 
      inner.addItem("bats"); 
     } 
    ]]> 
</mx:Script> 

<mx:Button label="Add inner list items" click="addInnerListItems()" /> 

<mx:List dataProvider="{outer}" rowCount="{outer.length}"> 
    <mx:itemRenderer> 
     <mx:Component> 
      <mx:VBox> 
       <mx:Label text="{this.data}" /> 
       <mx:List dataProvider="{outerDocument.inner}" rowCount="{outerDocument.inner.length}"> 
        <mx:itemRenderer> 
         <mx:Component> 
          <mx:Label text="{this.data}" /> 
         </mx:Component> 
        </mx:itemRenderer> 
       </mx:List> 
      </mx:VBox> 
     </mx:Component> 
    </mx:itemRenderer> 
</mx:List> 

리스트 크기가 정적으로 유지 :

찾는 문제를 예시하는 간략화 된 예이다.

외부 목록에 variableRowHeight="true"을 추가하면 내부 목록의 크기가 올바르게 조정됩니다. 그러나 외부 목록 자체는 고정 된 크기로 남아 있습니다.

모든 하위 항목을 표시하려면 두 목록의 크기를 자동으로 조정할 수 있습니까?

감사합니다. Stu

답변

1

목록 클래스를 재정의하고 measure 클래스를 재정 의하여 measureWidth 및 measuredHEight를 계산하여 모든 목록 항목이 전체 크기로 화면에 렌더 된 것처럼 값을 계산합니다.

그런 다음 삽입 목록을 포함하는 구성 요소에서 updateDisplayList()를 재정 의하여 위쪽 목록의 크기를 measuredWidth 및 measurdHeight로 조정합니다.

가볍게 접근하지는 않겠지 만. 이렇게하면 화면의 모든 항목이 렌더링되므로 처음부터 List 클래스를 사용하여 렌더러에서 재활용되는 이점을 무효화합니다.

+0

답장을 보내 주셔서 감사합니다. "모든 목록 항목이 화면에 전체 크기로 렌더링 된 것처럼 값을 계산하십시오"라고 말하면 미리 정의 된 정적 높이 값에 요소 수를 곱합니다 (대략적으로)입니까? 나는 이미 화면에 표시되지 않은 한 요소의 실제 높이를 요청할 수 없다고 가정합니다. 아니면 내가 틀렸어? – stubotnik

+0

variableRowHeight를 사용하는 경우 목록의 모든 itemRenderer를 반복하고 각 렌더러의 measuredHeight를 추가하여 measuredHeight를 계산해야합니다. Flex 구성 요소 LifeCycle과 Flex에서 구성 요소와 하위 구성 요소를 만드는 방법은 다음과 같습니다. http://livedocs.adobe.com/flex/3/html/help.html?content=ascomponents_advanced_2.html – JeffryHouser

+0

다시 한 번 감사드립니다. 나는 당신이 제안한 것과 같은 것을 기대했지만, List 클래스 'indexToItemRenderer() 메소드 설명에서 이것을 읽은 후에는 가능하지 않다고 생각했다. "아이템 렌더러는 볼 수있는 행 세트 내의 아이템에만 존재하기 때문에 이것을 사용할 수 없다. 방법이 보이지 않는 항목에 대해. " 그것은 당신이 염두에 두었던 것입니까, 아니면 List의 아이들에게 손을 가져다 다른 방법으로 그들을 측정 할 수 있습니까? – stubotnik