起步软件技术论坛
搜索
 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 13718|回复: 17

[分享] 关于物理返回键完美解决方案

  [复制链接]

16

主题

69

帖子

238

积分

中级会员

Rank: 3Rank: 3

积分
238
QQ
发表于 2016-4-19 09:37:22 | 显示全部楼层 |阅读模式
看到N多朋友遇到安卓物理返回键不好处理的问题,本人开发的时候也遇到过。着实让人头疼。
wex5默认的是“后退一步”,但在多个页面间往返时,后退就会绕来绕去。。。所以,很希望能和头部的返回按钮一致,按自己希望的逻辑执行。

进入正题

第一步,先屏蔽wex5默认的退出和后退。文件为:UI/system/components/justep/common/utils.js
在退出代码之前,加入一个自定义的 cookies 判断。。if(cookieExit){退出部份}...这样,就只有当你满足你指定的cookies 时,才会退出

同理,第二步,屏蔽后退功能。。。在 history.back(); 之前,也加入一个判断的代码,如 if(cookieBack){后退}。。这样,如果不满足你设定的条件,他就无法后退了。表现为,点返回键,不会有反应。


好了,关键的地方来了。怎么让他和头部的返回按钮一致呢?
我自己是用 windowDialog打开页面。这个有一个好处是关闭子页面的时候,可以轻松的告诉父页面,我要关闭啦。。。当然,用SHELL也可以。原理相同。

不过,注意一点,用 windowDialog 的时候,尽量每个页面的 windowDialog名称取不相同。大家都叫 windowDialog1会导致一些未知的问题。

首先,在主页面开始的时候,就设定一个cookies,让页面可以执行“再按一次退出”。 然后,不论点击页面上哪个对象,只要有转入子页面的,一律给设定为页面不能退出。。。这样,就防止在子页面点击返回键时,会有“再按一次退出”的现象。然后,在子页面监听返回键事件。。。点返回键的时候,用子页面的windowReceiver对象的 Receiver事件里,写入告诉你页面现在要关闭了。。。如this.comp("windowReceiver1").windowEnsure();

那么,父页面在接收到子页面的关闭通知后(this.comp("windowDialog").onReceive()),就改变先前设定的阻止退出条件,回复原来默认状况。这时,再按一下就会提示退出了.

同理,在子页面一开始的时候,就给出一个cookies条件,默认是不阻止后退,但不论点击哪个对象,只要有进入其它页面的时候,立即锁死这个条件,这时,这个子页面是无法后退的,只有在接收到那个“其它”页面“关闭的时候,才会放开。。。如此循环。。。。这样,不论在哪一个页面,第一次进入时,是可以后退的,但转到其它页面后,自身就无法后退了。。只有子页面关闭的时候才能后退。然后一级一级的后退,退到主页的时候,主页就会提示再按一次退出。
在子页面关闭期间,或父页面接收到子页面关闭通知的时候,还可以处理其它一些事情

这样,就完美解决了物理返回键和头部返回按钮同步的问题。。。。

不过,使用  windowDialog 需要注意的是,每一个页面的  windowDialog和windowReceiver,一定要用不同的名字。windowDialog  这个打开页面时,routable属性要设为 false.  在关闭页面时, this.comp("windowReceiver1").windowEnsure(); 这个动作前,一定要判断一下对象是否存在。否则会有一些莫名其妙的问题。


感觉, this.comp("windowReceiver1").windowEnsure(); 这个事件,是最先从父页面开始,然后才到子页面。。。。所以,原理其实很简单,就是给每一个页面加入一个“自锁机制”,自己不动的时候,是可以后退的,一动,马上给自己锁住。。只有其它人,才能把自己给解开。。




一点小经验,供大家分享。。。已经有实际成品,大家下载试试看。望大家有好的技巧时,也分享分享,让其它朋友,少走弯路。



logo2.png 扫载二维码下载,查看具体示例


评分

参与人数 1威望 +15 收起 理由
Masion + 15 对于分享精神点赞

查看全部评分

4

主题

20

帖子

50

积分

初级会员

Rank: 2

积分
50
QQ
发表于 2016-4-20 09:55:31 | 显示全部楼层
你好 楼主!
我下载测试了下  这个app
刚开始的时候还正常,用一会之后,主页面返回两次退出app就不起做用了,不知道是不是我手机的问题
回复 支持 反对

使用道具 举报

16

主题

69

帖子

238

积分

中级会员

Rank: 3Rank: 3

积分
238
QQ
 楼主| 发表于 2016-4-20 12:57:14 | 显示全部楼层
让爱永恒 发表于 2016-4-20 09:55
你好 楼主!
我下载测试了下  这个app
刚开始的时候还正常,用一会之后,主页面返回两次退出app就不起做用 ...

其实这个,我也还正在调试的。。。基本上每天要更新两三次,可能不小心改到了哪里。
但原理肯定是这样子的。后面N多个子页面都能顺利的返回了。这个只要自己控制好这个“自锁条件”,就肯定没差距题了
回复 支持 反对

使用道具 举报

16

主题

58

帖子

182

积分

初级会员

Rank: 2

积分
182
QQ
发表于 2016-4-26 21:11:35 | 显示全部楼层
楼主能把utils.js代码截图贴出来么?
回复 支持 反对

使用道具 举报

16

主题

69

帖子

238

积分

中级会员

Rank: 3Rank: 3

积分
238
QQ
 楼主| 发表于 2016-4-26 21:53:26 | 显示全部楼层
dingyunlong 发表于 2016-4-26 21:11
楼主能把utils.js代码截图贴出来么?

QQ图片20160426215246.png
回复 支持 反对

使用道具 举报

16

主题

58

帖子

182

积分

初级会员

Rank: 2

积分
182
QQ
发表于 2016-4-26 21:54:45 | 显示全部楼层
回复 支持 反对

使用道具 举报

56

主题

370

帖子

963

积分

高级会员

Rank: 4

积分
963
QQ
发表于 2016-4-27 09:10:59 | 显示全部楼层

感谢分享!
回复 支持 反对

使用道具 举报

191

主题

688

帖子

3323

积分

论坛元老

Rank: 8Rank: 8

积分
3323
QQ
发表于 2016-4-27 22:48:16 | 显示全部楼层
非常实用,先收藏,再慢慢研究,感谢分享
轻量化ERP--企业邦  网址:meiprocess.cn
qq:8269301
手机:13801998595
回复 支持 反对

使用道具 举报

19

主题

81

帖子

201

积分

中级会员

Rank: 3Rank: 3

积分
201
QQ
发表于 2016-4-28 09:03:56 | 显示全部楼层
看上去很好,但每个页面都要处理,太复杂,有没有更好更简单的方法。
回复 支持 反对

使用道具 举报

16

主题

69

帖子

238

积分

中级会员

Rank: 3Rank: 3

积分
238
QQ
 楼主| 发表于 2016-4-28 09:08:00 | 显示全部楼层
glassy2000 发表于 2016-4-28 09:03
看上去很好,但每个页面都要处理,太复杂,有没有更好更简单的方法。

亲,一看你就没有测试过了。。。

这根本就不用每个页面去处理。。。只需要在进入或退出的时候  添加/修改 一个 cookies 变量,就好了。。。不用很多代码的。说白了,就一个全局变量。。。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|X3技术论坛|Justep Inc.    

GMT+8, 2024-5-5 13:34 , Processed in 0.062629 second(s), 27 queries .

Powered by Discuz! X3.4

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表