2014-03-13 6 views
0

에서 아이템 렌더러 상태를 방지 할 수 있습니다. 이제 목록에서 첫 번째 또는 마지막 항목을 선택하고 데이터 공급자를 새로 고칠 때마다 두 항목의 현재 상태가 서로 바뀝니다.플렉스 모바일 내가 2 개 사용자 정의 상태를 정의한이 사용자 정의 목록 항목 렌더러를 재활용

상품 상태를 유지하는 방법에 대해 안내 해주십시오. 고맙습니다.

참고 : usevirtuallayout을 false로 변경하면 모두 잘 작동합니다. 그러나 그것은 내가 의도 한 바가 아닙니다.

<fx:Script> 
    <![CDATA[ 

protected function init(event):void 
{ 
    currentState = "collapse"; 
} 

override public function set data(value:Object):void 
{ 
    trace(currentState.toString()); 
} 

protected function btn_clickHandler(event:MouseEvent):void 
{ 
    currentState = "expand"; 
} 

]]> 
</fx:Script> 

<s:states> 
    <s:State name="expand"/> 
    <s:State name="collapse"/> 
</s:states> 

<s:Button id="changeStateButton" click="btn_clickHandler(event)"/> 

위의 예제는 하나의 버튼의 itemRenderer의 currentState를 변경하는 간단한 아이템 렌더러는 다음

[편집] 는 아이템 렌더러 내 코드입니다. 데이터 공급자에 3 개의 항목이 있으며 각 항목은 기본적으로 "축소"상태입니다. 나는를 새로 고칠 때 지금

collapse 
collapse 
expand 

: 나는 마지막 항목에서 버튼을 클릭하면

collapse 
collapse 
collapse 

가 ...이 추적 결과가 될 것입니다 :이 설정 데이터 기능의 추적 결과

expand 
collapse 
collapse 

누군가가이 시나리오를 설명 할 수 : 데이터 공급자는이 함수를 호출하여 ...이 결과는 "() arraycollection.refresh"? useVirtualLayout이 true로 설정된 경우에만 발생합니다 ...

+0

자세한 내용을 입력하십시오. 예제로 목록을 표시하는 데 사용되는 코드입니다. –

+0

안녕하세요, @PascalLeMerrer 위에 추가 된 새 편집을 참조하십시오. –

답변

0

데이터 공급자를 업데이트 한 후 항목 렌더러를 다시 할당 해보십시오.

//update data provider 
itemList.dataProvider = myCollection; 
//update the item renderer 
itemList.itemRenderer = new ClassFactory(cutomItemRenderer); 

물론이 솔루션은 리소스 집약적입니다.