在 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/