覆盖Android sencha应用程序中的后退按钮
在Android上使用sencha touch应用程序时,设备后退按钮的行为是否可能完全与本机Andriod应用程序的行为相同?线程解决了同样的问题。建议的解决方案是覆盖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
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();
}