在dataProvider更改时调整列表组件的大小

时间:2011-07-10 05:12:45

标签: actionscript-3 flex flex4 flex4.5 flex-spark

我有一个包含实现自定义渲染器的列表的组件。我将此组件用作工具提示,将其保留在内存中,并根据需要更改数据绑定。

TTComponent是一个扩展Canvas的类:

<s:TTComponent>
  <s:BorderContainer>
    <s:List id='lstItems' dataProvider="{data.Items}" width="50%" borderVisible="false" contentBackgroundColor="#222222">
      <s:layout>
        <s:VerticalLayout useVirtualLayout="false" requestedMinRowCount="1"/>
      </s:layout>
      <s:itemRenderer>
        <fx:Component>
          <s:ItemRenderer>
            <s:HGroup>
              <s:Label text="{data.Value}" paddingLeft="6" />
              <s:Label text="{data.Name}" />
            </s:HGroup>
          </s:ItemRenderer>
        </fx:Component>
      </s:itemRenderer>
    </s:List>        
  </s:BorderContainer>
</s:TTComponent>

现在,鼠标悬停的驱动程序代码如下所示:

if (tt == null) {
  tt = new TTComponent();
}
tt.data = data;
PopUpManager.addPopUp(tt, this);

当然,鼠标出来了:

PopUpManager.removePopUp(tt);

现在,当包含许多项目的数据设置为tt.data时,列表会自行调整大小并显示正常。但是,在此之后,如果包含少量项目的数据设置为tt.data,则组件会暂时显示大于其需要的值,然后将其自身调整为较小。

我想要做的是让组件在显示之前自行调整大小,所以我没有在屏幕上看到调整大小。关于如何做到这一点的任何想法?

1 个答案:

答案 0 :(得分:0)

首先,我会强迫您考虑创建一次组件,只是在需要时显示/隐藏/移动它而不是使用弹出管理器。这就是我通常会做的类似于你正在尝试的事情。它会表现得更好,并可能自行解决这个问题。只是一个想法。

其次,在重新绑定新数据后,请尝试以下操作:

告诉它需要调整大小:

tt.invalidateDisplayList();

此外,如果是ArrayCollection,您可能需要告诉它您通过刷新数据来更改数据:

data.refresh();

如果不能解决这个问题,请告诉我。

相关问题