当点击onBackpress方法或者onKeyDown方法时出现不能响应的问题解决办法
2012-06-29 17:25
686 查看
一般来讲,当我们点击手机上的back键之后,会直接调用activity的onbackpress()方法,或者我们也可以通过这样来进行捕捉点击事件
可是在某些情况下,捕捉不到该事件,例如在对话框显示的时候
加入现在有一个访问网络的操作 比较耗时,所以采用progressdialog来显示一个正在进行网络操作的进度,可是如果用户觉得等待事件太长,可能直接想退出该网络应用界面,去做其他的事情,这时我们点击back键需要将dilog关掉,同时关掉AsyncTask 以及中断http操作(该部分以后将详细总结出来),
观察dialog部分的源代码如下所示:
这样我们在有窗口显示的activity时就能够利用此方法捕获该back键后退的动作响应,实现我们想要的操作,如上,我想要进行async的cancel操作。
基本实现过程就这样,有个截图就好了
@Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK ) { mProgressDialog.dismiss(); //取消网络操作 cancelLoad(); } return super.onKeyDown(keyCode, event); }
可是在某些情况下,捕捉不到该事件,例如在对话框显示的时候
加入现在有一个访问网络的操作 比较耗时,所以采用progressdialog来显示一个正在进行网络操作的进度,可是如果用户觉得等待事件太长,可能直接想退出该网络应用界面,去做其他的事情,这时我们点击back键需要将dilog关掉,同时关掉AsyncTask 以及中断http操作(该部分以后将详细总结出来),
观察dialog部分的源代码如下所示:
/** * Called when the dialog has detected the user's press of the back * key. The default implementation simply cancels the dialog (only if * it is cancelable), but you can override this to do whatever you want. */ public void onBackPressed() { if (mCancelable) { cancel(); } } 可以得到当有progressdialog出现的时候,我们点击back键的时候 会被dialog的默认onbackPressed获取到,所以当有progressdialog出现的时候,我们想点击back键的时候,能够在onbackPressed方法中去捕获该操作,我们可以这样: 自己写一个dialog 继承 progressdialog 当然dialog也可义 代码如下:
class myDialog extends ProgressDialog{ private Context context; public myDialog(Context context){ super(context); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { if (keyCode == KeyEvent.KEYCODE_BACK ) { mProgressDialog.dismiss(); //取消网络操作 cancelLoad(); } return super.onKeyDown(keyCode, event); } }
这样我们在有窗口显示的activity时就能够利用此方法捕获该back键后退的动作响应,实现我们想要的操作,如上,我想要进行async的cancel操作。
class LoadSearchTask extends AsyncTask<Void, Void, List<Station>> { public void cancelTask() { Status status = getStatus(); MyLog.d("status = " + status); switch (status) { case PENDING: cancel(true); break; case RUNNING: cancel(true); Net.abort(); break; case FINISHED: cancel(true); break; default: break; } }
基本实现过程就这样,有个截图就好了
相关文章推荐
- 当点击onBackpress方法或者onKeyDown方法时出现不能响应的问题解决办法
- 不能在USB中安装Ghost XP系统或者在Ghost 过程中出现问题的的原因与部分解决方法.
- 安装MySQL数据库最后一步出现无法响应问题详细解决方法
- 解决windows phone 7 toolkit中Expanderview点击未展开的可展开列表项题目下边缘空白出现响应的问题
- 我把一个VC6的工程转换为VS2008的工程后,编译总是出现找不到而且不能升级vc90.pdb文件的问题,error C2471--解决办法
- Studio中的项目接入百度地图sdk后,地图不能正常显示及出现 errorcode: 230 uid: -1 appid -1 msg: APP Scode码校验失败 问题的解决方法
- TabActivity中onKeyDown无法响应的解决方法及连续点击两次退出应用程序
- 【system】解决window7/8不能全屏,或者出现黑边的问题
- QT 编译通过但是运行出现程序异常结束或者crashed的问题 在QT creator中最佳解决办法
- IE浏览器无法启动或者点击无响应的解决办法
- 在Bootstrap的modal中使用select2出现不能显示下拉框问题解决办法
- ListView的Item上有个按钮 ,Item不能响应点击事件的解决方法
- jQuery on()方法绑定动态元素的点击事件无响应的解决办法
- jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法
- 多找方法, 少找借口, 总有人可以找到问题的解决办法, 为什么不能是你我呢?---不能抓日志场景下如何抓到日志?
- Android Fragment中onActivityResult()方法获取不到返回数据或者无响应的解决办法
- 使用jquery on()方法解决html页面点击元素,事件无响应的问题
- Android 中ListView点击Item无响应问题的解决办法
- jQuery EasyUI动态添加控件或者ajax加载页面后不能自动渲染问题的解决方法
- MyEclipse不能自动编译解决方法总结(转)/debug时断点乱跳问题的解决办法