Long-Press spark.components.list Элемент - PullRequest
1 голос
/ 30 июня 2011

Кто-нибудь знает, есть ли какой-нибудь жест Long-Press (как на Android) в новой версии flex?

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

Если нет встроенного, кто-нибудь знает какие-либо ресурсы / сообщения в блоге о том, как сделать жест Long-Press - или, кроме того, как сделать редактируемый список?

Ответы [ 3 ]

2 голосов
/ 01 июля 2011

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

        private var deleteAlert:DeleteAlert = new DeleteAlert();
        private  var longPressTimer:Timer = new Timer(1500,1);

        protected function LoadChartView_viewActivateHandler(event:ViewNavigatorEvent):void {
            enableClick();
        }
        private function startLongPressMouse(event:MouseEvent):void {   
            startLongPressTimer();
            list.addEventListener(MouseEvent.MOUSE_MOVE, endLongPressMouse);
        }
        private function endLongPressMouse(event:MouseEvent):void {
            stopLongPressTimer();
            enableClick();
            list.removeEventListener(MouseEvent.MOUSE_MOVE, endLongPressMouse);
        }
        private function startLongPress(event:TouchEvent):void {
            startLongPressTimer();
            list.addEventListener(TouchEvent.TOUCH_MOVE, endLongPress);
        }
        private function endLongPress(event:TouchEvent):void {
            stopLongPressTimer();
            enableClick();
            list.removeEventListener(TouchEvent.TOUCH_MOVE, endLongPress);
        }
        private function startLongPressTimer():void {
            longPressTimer.start();
            longPressTimer.addEventListener(TimerEvent.TIMER_COMPLETE, longPressHandler);
        }
        protected function disableClick():void {
            trace("disable click");
            list.removeEventListener(MouseEvent.CLICK, regularClickHander);
        }
        public function enableClick():void {
            list.callLater(list.addEventListener, [MouseEvent.CLICK, regularClickHander]);
        }
        public function resetListSelection():void {
            list.selectedIndex = -1;
            list.validateDisplayList();
        }
        private function stopLongPressTimer():void{
            longPressTimer.stop();
            longPressTimer.reset()
        }
        public function longPressHandler(event:TimerEvent):void{
            disableClick();
            stopLongPressTimer();
            deleteAlert.addEventListener(PopUpEvent.CLOSE, popupClosedHandler);
            deleteAlert.open(this, false);
            PopUpManager.centerPopUp(deleteAlert);
        }
        public function popupClosedHandler(event:PopUpEvent):void{
            if (event.commit)data.removeItemAt(list.selectedIndex);
            callLater(resetListSelection);
        }

Я использовал события мыши и касания для простого тестирования:

<s:List id="list" top="0" bottom="0" left="0" right="0"
        dataProvider="{data}"
        touchBegin="startLongPress(event)" touchEnd="endLongPress(event)"
        mouseDown="startLongPressMouse(event)" mouseUp="endLongPressMouse(event)">
0 голосов
/ 30 июня 2011

Взгляните на Gestouch (более свежая ветка разработки) org.gestouch.gestures.LongPressGesture

0 голосов
/ 30 июня 2011

Не похоже, на основе ASdocs для класса TouchEvent :

Я немного удивлен этим, на самом деле.Вы, вероятно, можете что-то смоделировать, используя события TOUCH_END и TOUCH_BEGIN с таймером .

...