изменение размера списка компонентов при изменении dataProvider - PullRequest
0 голосов
/ 10 июля 2011

У меня есть компонент, который содержит список, который реализует пользовательский рендерер. Я использую этот компонент в качестве всплывающей подсказки, сохраняя его в памяти и просто изменяя привязки данных по мере необходимости.

Примерно так: 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 голосов
/ 11 июля 2011

Во-первых, я бы заставил вас подумать о том, чтобы один раз создать компонент и просто показать / скрыть его / переместить, когда это необходимо, вместо использования всплывающего менеджера.Вот как я обычно делаю что-то похожее на то, что вы пытаетесь.Он будет работать лучше и, вероятно, решит эту проблему самостоятельно.Просто мысль.

Во-вторых, после того, как вы привяжете к нему новые данные, попробуйте следующее:

Скажите, что ему нужно изменить размер:

tt.invalidateDisplayList();

Также вам может понадобитьсяскажите, что вы изменили данные путем обновления данных, если ArrayCollection:

data.refresh();

Дайте мне знать, если это не сработает.

...