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

标签 android extjs sencha-touch sencha-touch-2

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

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

    function onBackKeyDown(eve) {

        eve.preventDefault();

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

    }
}

但在这个功能中,我如何才能转到之前访问过的屏幕?

最佳答案

当然,这取决于您的用户界面是如何构建的以及 View 是如何连接的。我能想到的最简单的方法是以某种方式检测页面中是否存在后退按钮并触发对它的点击。

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

关于如何实现这个逻辑:没有魔杖。如果可以通过一个且只有一个父 View 访问特定 View ,那么您可以对其进行硬编码。否则,如果可以从多个 View 访问一个 View ,我会在 View Controller 的属性中保存对我来自的 View 的引用,然后在返回按钮的 tap 上移动到该 View 。

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

所以在我的 backbutton 处理程序中,我使用 [cls=back] 检查这样的按钮(但您也可以检查 ui 或任何你想要的),然后我触发 tap 事件。 此外,当我检测到我在 Root View 中时,我会询问用户是否要退出应用程序,如果是,我将调用 exit()

_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();
}

关于android - 在 Android 的 sencha 应用程序中覆盖后退按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24261467/

相关文章:

android - 动态 AutoCompleteTextView 上的 NullPointerException

android - 是否删除了 android.os.Environment 中的公共(public)静态字段? (安卓 2.1)

javascript - ExtJS - 保存树面板的状态。

android - Phonegap 3 - Android 插件不工作

java - 如何防止客户端在 Android 库中看到内部私有(private)类?

android - Windows 7 上的 Genymotion 无法连接到我的虚拟设备

excel - ExtJS 5 电子表格选择模型错误

entity-framework - Breeze 兼容的 JavaScript GUI 框架

javascript - 处理 openlayers mobile 标记的点击事件

javascript - 修改sencha中的CSS伪选择器样式