0
我已將子類LabelItemRenderer
類爲我的移動應用程序中的火花列表創建可展開的呈現器。減少可調整大小的生命週期驗證調用Flex LabelItemRenderer
當用戶選擇一個項目時,渲染器的大小增加,顯示附加數據。渲染器基本上看起來像這樣(我已經刪除了這裏不重要的部分,所以這基本上是僞代碼)。
public class PositionsGridRenderer extends LabelItemRenderer
{
public function PositionsGridRenderer() {
super();
addEventListener(MouseEvent.CLICK, expandHandler);
}
protected override function createChildren():void {
super.createChildren();
_dg = new DataGroup();
_dg.visible = false;
addChild(_dg);
}
private function expandHandler(event:Event):void {
if(_gridVisible) {
if(!_detailClicked) {
_dg.visible = false;
_gridVisible = false;
}
_detailClicked = false;
} else {
_dg.visible = true;
_gridVisible = true;
}
}
public override function set data(value:Object):void {
if(!value) return;
super.data = value;
var pos:Position = data as Position;
label = pos.positionName;
_dg.dataProvider = pos.positionSymbols;
}
protected override function measure():void {
!_gridVisible ? measuredHeight = 30 : measuredHeight = 30 + getElementPreferredHeight(_dg);
this.height = measuredHeight;
}
protected override function layoutContents(unscaledWidth:Number, unscaledHeight:Number):void {
setElementSize(labelDisplay, unscaledWidth, 30);
setElementPosition(labelDisplay, 10,10);
if(_gridVisible) {
setElementSize(_dg, unscaledWidth, getElementPreferredHeight(_dg));
setElementPosition(_dg, 0, 30);
} else {
setElementSize(_dg, unscaledWidth, 0);
}
invalidateSize();
}
}
}
按預期工作,我只是想知道是否有減少的驗證量的方式調用,當我展開它渲染器做。 如果點擊展開,layoutContents
和measure
函數都按以下順序調用三次:layoutcontents - > measure,layoutcontens - > measure,layoutcontents - > measure。
我明白他們被稱爲一次,因爲我無效的大小,但三次似乎很奇怪。 有誰知道這是爲什麼發生,或者甚至如何防止這種情況發生?
我不清楚如何從您的帖子調整渲染器。它是否像一個窗口,用戶點擊並拖動來設置一些新的尺寸?或者,它是一個固定的選項,通過點擊一個按鈕在兩種不同的尺寸之間切換? – JeffryHouser
它是固定的。查看渲染器的初始大小爲30.查看'measure()'函數。當網格(要顯示的可選數據)不可見時,呈現器的大小保持爲30.當顯示網格時(由expandHandler()函數切換),呈現器的大小增加到初始大小(30)加上網格的首選高度。 – AlBirdie
我知道你說過這是僞代碼;但不應該在被保護之前的'覆蓋',而不是之後? 「超級」被稱爲layoutContents和/或措施?如果在layoutContents中使用invalidateSize(),那麼每次組件重繪時都不會觸發新的驗證週期?很多交互可以invalidateDisplayList();但我沒有看到它是你手動做的,所以我不清楚是什麼導致它。 – JeffryHouser