phonegap + sencha touch 监控backbutton按钮返回事件切换页面

爱技术爱生活TAO 2015-05-07

前提:

sencha cmd创建好sencha项目,安装好cordova环境。

详细配置过程

sencha:http://docs-origin.sencha.com/cmd/5.x/touch/cmd_app.html

cordova:http://cordova.apache.org/docs/en/5.0.0/guide_cli_index.md.html#The%20Command-Line%20Interface

在项目中cordova/www/index.js绑定对backbutton的事件监控

bindEvents: function(){
        document.addEventListener('deviceready', this.onDeviceReady, false);	
        document.addEventListener("backbutton", eventBackButton, false); //返回键
}

 对应eventBackButton代码

function eventBackButton(){
	//confirm("再点击一次退出!");
	window.plugins.toast.showShortBottom('再点击一下返回,将退出私募通。');
	document.removeEventListener("backbutton", eventBackButton, false); //注销返回键
	//3秒后重新注册
	var intervalID = window.setInterval(function(){
		window.clearInterval(intervalID);
		document.addEventListener("backbutton", eventBackButton, false); //返回键
	},3000);
}

这样设置完后就可以监控到android设备的back按钮事件,防止点击back键后直接退出。

方法中用户的 window.plugins.toast.showShortBottom 是cordova插件,安装地址是https://github.com/EddyVerbruggen/Toast-PhoneGap-Plugin

界面间如何在sencha touch中使用back键进行跳转。

sencha touch页面布局逻辑为,Main.js采用card布局,其他子页面动态添加到Main中,如何使用back键进行页面间跳转。这里主要使用card布局的activeitemchange事件,在页面切换时触发此事件,进行back按钮的事件注册。

layout: {
	type : 'card',
	animation : 'scroll',
	listeners : {
		'activeitemchange' : function(lay,newActiveItem,oldActiveItem){
			var newActiveItemBackHandler;
			if(newActiveItem){
				newActiveItemBackHandler = newActiveItem.backButtonHandler || newActiveItem.config.backButtonHandler;
			}
			var oldActiveItemBackHandler;
			if(oldActiveItem){
				oldActiveItemBackHandler = oldActiveItem.backButtonHandler || oldActiveItem.config.backButtonHandler;
			}
			if(newActiveItemBackHandler){	// 绑定打开页面的返回按钮事件
				document.removeEventListener("backbutton", eventBackButton, false);
				if(oldActiveItemBackHandler){
					document.removeEventListener("backbutton", oldActiveItemBackHandler,false);
				}
				document.addEventListener("backbutton", newActiveItemBackHandler, false);
			}else{
				if(oldActiveItemBackHandler){
					document.removeEventListener("backbutton", oldActiveItemBackHandler, false);
					document.addEventListener("backbutton", eventBackButton, false);
				}
			}
		}
	}
}

newActiveItem,oldActiveItem分别对应新页面和旧页面。

在每个页面里可以自定义委托方法,进行页面间逻辑跳转。

backButtonHandler : function(event){	
	// 防止弹出分享菜单后,back键返回上一页
	var socialShareView = Ext.getCmp('_SocialShareView');
	if(socialShareView!=null&&!socialShareView.isHidden()){
		return true;
	}
        // 防止android back键在弹出窗户后返回到上一页
	if(Ext.Msg.isHidden()!=null&&!Ext.Msg.isHidden()){
		return;
	}
	var mainView = Ext.getCmp('_MainView');
	var fromView = Ext.getCmp('_EpNeedDetailView').getFromViewString();
	if(fromView == "collect"){		// 返回我的收藏
		mainView.animateActiveItem(mainView.myCollectView,{type: 'slide', direction: 'right'});
	}else{							// 返回首页
		var	topView = Ext.getCmp('_TopView');
		mainView.animateActiveItem(topView,{type: 'slide', direction: 'right'});
	}
}

这样就可以通过委托方法,控制页面间跳转了。

还需要注意一点,在返回事件委托方法中,要判断一下当前页面有没有Ext.Msg元素,如果有的话需要禁止backButtonHandler的执行。

相关推荐