Adobe Air: скроллер выдает ошибку при изменении фокуса между разными приложениями

TypeError: Error #1009: Cannot access a property or method of a null object reference.
    at spark.components::Scroller/focusInHandler()[E:\dev\4.y\frameworks\projects\spark\src\spark\components\Scroller.as:2139]
    at flash.display::Stage/set focus()
    at mx.core::UIComponent/setFocus()[E:\dev\4.y\frameworks\projects\framework\src\mx\core\UIComponent.as:9905]
    at spark.components::RichEditableText/setFocus()[E:\dev\4.y\frameworks\projects\spark\src\spark\components\RichEditableText.as:3126]
    at spark.components.supportClasses::SkinnableTextBase/setFocus()[E:\dev\4.y\frameworks\projects\spark\src\spark\components\supportClasses\SkinnableTextBase.as:1874]
    at mx.managers::FocusManager/activateWindowHandler()[E:\dev\4.y\frameworks\projects\framework\src\mx\managers\FocusManager.as:740]
    at flash.events::EventDispatcher/dispatchEventFunction()
    at flash.events::EventDispatcher/dispatchEvent()
    at mx.core::UIComponent/dispatchEvent()[E:\dev\4.y\frameworks\projects\framework\src\mx\core\UIComponent.as:13152]
    at spark.components::WindowedApplication/nativeWindow_activateHandler()[E:\dev\4.y\frameworks\projects\airspark\src\spark\components\WindowedApplication.as:2739]

В моей программе Adobe Air я получал вышеуказанную ошибку всякий раз, когда использую свое приложение, и переключаю внимание между этим приложением и другими приложениями. (Я пробовал несколько раз, и эта ошибка воспроизводима.)

Что вызывает эту проблему и как ее исправить?

РЕДАКТИРОВАТЬ: моя программа имеет представление стека, и один из стеков просмотра имеет список. Эта ошибка выше произойдет, когда в списке есть хотя бы один объект.

Ответы на вопрос(4)

что это старо, но вот решение, которое работает для меня.

dataGrid.scroller.addEventListener(FocusEvent.FOCUS_IN, dataGridFocusInHandler, false, 1);

а такж

protected function dataGridFocusInHandler(event:FocusEvent):void {
    if(dataGrid.scroller.focusManager == null) {
        event.stopImmediatePropagation();
    }
}

может также применяться к списку, который я ожидаю

Cheers Adz

 Adz02 мая 2014 г., 03:47
@ Community Edit. Мне не нужен был .scroller в dataGrid.scroller.addEventListener, чтобы решить мою проблему, но если вы чувствуете, что он обязательно должен быть там!

и похоже, что это известная ошибка SDK. В моем случае я просто написал собственный класс Scroller, в котором добавлена проверка focusManager! = Null. Что-то тип

package components
{
    import flash.events.FocusEvent;
    import spark.components.Scroller;
    public class MyScroller extends Scroller
    {
        public function MyScroller()
        {
            super();
        }

        override protected function focusInHandler(event:FocusEvent):void
        {
            if(focusManager != null) {
                super.focusInHandler(event);
            }
        }
    }
}

Лучшие реграды, Роман

 1.21 gigawatts17 июл. 2012 г., 22:10
У меня та же ошибка. Как вы примените это?

и основной причиной было то, что PopUpManager / PopUpAnchor не будет правильно устанавливать focusManager, если выскочивший компонент не реализуетIFocusManagerContainer интерфейс. После реализации такого интерфейса проблема исчезнет.

и оказалось, что она была вызвана некоторыми кнопками, которые у меня были как средства визуализации элементов в моей сетке. Эти кнопки изменят вид на другой раздел и, по-видимому, сохраняют фокус после нажатия, вызывая всевозможные проблемы. Я установил их в focusEnabled = false, и это решило проблему.

Ваш ответ на вопрос