Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/extjs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
覆盖Android sencha应用程序中的后退按钮_Android_Extjs_Sencha Touch_Sencha Touch 2 - Fatal编程技术网

覆盖Android sencha应用程序中的后退按钮

覆盖Android sencha应用程序中的后退按钮,android,extjs,sencha-touch,sencha-touch-2,Android,Extjs,Sencha Touch,Sencha Touch 2,在Android上使用sencha touch应用程序时,设备后退按钮的行为是否可能完全与本机Andriod应用程序的行为相同?线程解决了同样的问题。建议的解决方案是 if (Ext.os.is('Android')) { document.addEventListener("backbutton", Ext.bind(onBackKeyDown, this), false); function onBackKeyDown(eve) { eve.prevent

在Android上使用sencha touch应用程序时,设备后退按钮的行为是否可能完全与本机Andriod应用程序的行为相同?线程解决了同样的问题。建议的解决方案是

if (Ext.os.is('Android')) {
    document.addEventListener("backbutton", Ext.bind(onBackKeyDown, this), false);

    function onBackKeyDown(eve) {

        eve.preventDefault();

        //do something
        alert('back button pressed');

    }
}

但是在这个函数中,我如何才能转到以前访问过的屏幕?

当然,这取决于用户界面的构建方式和视图的连接方式。我能想到的最简单的方法是检测页面中是否存在后退按钮,并触发对其的单击

在我的应用程序中,每个需要处理
backbutton
事件的视图都有一个带有
cls='back'
的按钮,该按钮实现了一个
点击
监听器,负责返回到上一个视图的逻辑

关于如何实现这个逻辑:没有魔杖。如果可以通过一个且仅通过一个父视图访问特定视图,则可以对其进行硬编码。否则,如果可以从多个视图访问某个视图,我会在该视图的控制器的属性中保存对来自该视图的引用,然后在backbutton的
点击
,我会移动到该视图

移动到视图的动画通常可以通过
Ext.Viewport.animateActiveItem(parentView,{type:'fade'})获得(但这同样取决于如何实现视图树)

因此,在我的
backbutton
处理程序中,我用
[cls=back]
检查这样一个按钮(但您也可以检查
ui
或任何您想要的内容),然后我在其上触发
点击
事件。
此外,当我检测到我在根视图上时,我会询问用户是否要退出应用程序,如果是,我会调用
exit()


“是否存在后退按钮”意味着我必须使用导航视图?不。我将进一步解释我的观点,让它更清楚。这个带有iconCls=back的按钮是否由sencha控制,这样当我们单击它时,它将引导我们进入上一个视图,而不为它编写任何逻辑?我可以让它不可见,因为我的应用程序中没有这样的按钮吗?不,这取决于你来实现逻辑,是的,你可以让它不可见,但是删除这个复选框:
!backbutton.ishiden()
再次编辑我的答案。
_handleBackButtonEvent : function(e) {

    // First look if the current view is the mainView
    var item = Ext.Viewport.getActiveItem();

    // If we are on mainView, quit.
    // Sayonara, goodbye, adios
    if (item.getId() === 'mainView') {
        navigator.notification.confirm(
            "Really quit?",
            function(option) {
                if (option == 1) {
                    navigator.app.exitApp();
                }
            }, 
            "Confirm", 
            "Yes,No"
        );
    } else {
        // else look if the current view has a backbutton
        var titlebar = item.down('titlebar[docked=top]');
        var backbutton = null;

        if (titlebar) {
            backbutton = titlebar.down('button[iconCls=back]');
        }

        if (backbutton && !backbutton.isHidden() && !backbutton.isDisabled()) {
            backbutton.fireEvent('tap');
        } else {
            // if not, fallback to mainView
            item = Ext.getCmp('mainView');
            Ext.Viewport.animateActiveItem( item, {type: 'slide', direction: 'right'});
        }

    }

    e.preventDefault();
}