Кнопка на Spark List ItemRenderer не может быть нажата при определенных условиях - PullRequest
5 голосов
/ 22 февраля 2012

У меня есть список искр с моим собственным пользовательским средством визуализации. Когда пользователь переворачивает элемент в списке, в строке появляются левая и правая кнопки, позволяющие пользователю изменить значение отображаемого значения. Например, если есть 5 приоритетов (от 1 до 5), левая кнопка уменьшает значение, а правая кнопка увеличивает его.

Краткое примечание: на самом деле это не кнопки, а символы: изображения, разработанные для работы в виде кнопок.

Теперь это работает нормально, за исключением одного конкретного условия: если пользователь выбирает строку, затем перемещает курсор из строки, а затем обратно в строку, когда пользователь нажимает на любую кнопку, ничего не происходит. Хотя этот сценарий звучит запутанно, это то, что тестовые пользователи делают все время! Это действительно расстраивает их.

Я обнаружил причину такого поведения: кнопки отображаются только при наведении и выбранных состояниях средства визуализации элементов. Это то, что я хочу сделать - кнопки не должны быть видны, если указатель пользователя не способен их нажимать. Когда элемент выбран в списке, состояние средства визуализации переходит к выбранному. Повторное нажатие не меняет состояние. Перемещение указателя из строки, затем снова обратно и щелчок (по уже выбранной строке) переводит состояние строки из выбранного, в нормальное состояние (при наведении курсора мыши) и обратно в выбранный (при наведении курсора мыши). Я нахожу это очень странным! Это означает, что кнопка фактически исчезает, когда в нормальном состоянии (что она должна), таким образом, не нажимается).

Я считал, что каким-то образом у меня могут быть изображения «выше» в Z-порядке на устройстве визуализации элементов, и, таким образом, они перехватывают событие click до того, как средство визуализации элементов получает его, но я не могу заставить это работать.

Может кто-нибудь помочь?

Если это поможет, фрагмент из ItemRenderer будет ниже:

<s:HGroup width="150" verticalAlign="middle" verticalCenter="0">
  <s:Image id="previousItemButton" buttonMode="true" source="{_leftArrow}" width="16" height="16" visible.normal="false" visible.hovered="true" visible.selected="true" click="previousClicked(event)"/>
  <s:Label text="{data.outputFormat.value}" width="100%" click="nextClicked(event)"/>
  <s:Image id="nextItemButton" buttonMode="true" source="{_rightArrow}" width="16" height="16" visible.normal="false" visible.hovered="true" visible.selected="true" click="nextClicked(event)"/>
</s:HGroup>

UPDATE:

Проблема была вызвана ложным событием rollOut на самом высоком уровне компонентов, составляющих ItemRenderer. Этот rollOut вызвал метод, который состоял из:

protected function hgroup1_rollOutHandler(event:MouseEvent):void {
  if (this.selected) {
    this.selected = false;
  }
}

Это вызывало проблему и удаляло rollOut, а метод исправлял проблему. Я не знаю, почему на mouseDown активируется свертывание.

...