Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   Flex (http://www.flasher.ru/forum/forumdisplay.php?f=84)
-   -   Не обрабатывается кнопка Back на мобильном (http://www.flasher.ru/forum/showthread.php?t=173991)

Astraport 15.01.2012 21:04

Не обрабатывается кнопка Back на мобильном
 
Создаю мобильный проект на Flex. Использую ViewNavigatorApplication и несколько View.
Обратная навигация осуществляется двумя способами: хардверной клавишей Back и кнопкой "Назад" в заголовке каждого View. В первом случае производятся переходы по истории открытия вкладок с помощью navigator.popView();. Во втором, программно определяется на какую вкладку нужно вернуться - navigator.pushView(views.View);.

Все работает, но нужно чтобы на первом View (то что firstView) по нажатию на клавишу Back выводилась вьюшка с предложением закрыть приложение. Я оверрайдю backKeyUpHandler в главном MXML:
Код AS3:

override protected function backKeyUpHandler(event:KeyboardEvent):void
                        {
                                if (navigator.activeView.id == "first"){
                                        navigator.pushView(views.MyAppExitView);
                                } else {
                                        navigator.popView();
                                }
                        }

Тоже работает, но только в случае, если возврат на первую вьюшку осуществляется программно (то есть navigator.pushView(views.MyAppFirstView);). Если вернуться с помощью клавиши Back, то backKeyUpHandler не обрабатывается.

Нет мыслей как решить проблему?
Спасибо.

Ivanaka 25.01.2012 19:09

Я ViewNavigatorApplication не использую, может не совсем то что вам нужно. Вот как вешаю действия на хардварные кнопки:

Код AS3:

//вешаем слушатель для кнопок
private function enableHardwareKeyListeners(event:FlexEvent):void {
                                NativeApplication.nativeApplication.addEventListener("keyDown", handleButtons, false, 0, true);
                        }
//функция выхода из приложения
                        public function closeApp():void{
                                NativeApplication.nativeApplication.exit();
                        }
//функция слушателя
                        private function handleButtons(e:KeyboardEvent):void{
                                if(e.keyCode == Keyboard.BACK)//если кнопка Back
                                {
                                        e.preventDefault();
                                        if (currentState != 'general'){//если находимся не на главном view/state
                                                currentState = 'general';//идем на главный вид
                                        }else{//если находимся на главной - вызываем диалоговое окно для закрытия приложения. Для закрытия юзаем closeApp()
                                        alertShow('EXIT');
                                        }
                                }
                                else if(e.keyCode == Keyboard.MENU){//если кнопка Menu
                                        e.preventDefault();
                                        //вызываем меню или еще чего
                                }
                        }


Genzo 25.01.2012 19:17

Код AS3:

<s:View xmlns:fx="http://ns.adobe.com/mxml/2009" 
                xmlns:s="library://ns.adobe.com/flex/spark"
                actionBarVisible="false" overlayControls="false" tabBarVisible="false"  viewActivate="loadData()" viewDeactivate="die()" backKeyPressed="event.preventDefault();myCustonEvent();" >

Добавлено через 30 секунд
Код AS3:

backKeyPressed="event.preventDefault();myCustonEvent();"


Astraport 25.01.2012 19:23

Ivanaka, спасибо. Я ещё попробую, конечно, но тогда все способы кажется перепробовал.

Добавлено через 2 минуты
Genzo, и это тоже попробую:)

Там проблема была в том, что выход по Back нужно сделать на первой View, а с остальных переход по иерархии назад.


Часовой пояс GMT +4, время: 07:11.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.