一般来讲,当我们点击手机上的back键之后,会直接调用activity的onbackpress()方法,或者我们也可以通过这样来进行捕捉点击事件

  1. @Override
  2. public boolean onKeyDown(int keyCode, KeyEvent event) {
  3. if (keyCode == KeyEvent.KEYCODE_BACK ) {
  4. mProgressDialog.dismiss();
  5. //取消网络操作
  6. cancelLoad();
  7. }
  8. return super.onKeyDown(keyCode, event);
  9. }

可是在某些情况下,捕捉不到该事件,例如在对话框显示的时候

加入现在有一个访问网络的操作 比较耗时,所以采用progressdialog来显示一个正在进行网络操作的进度,可是如果用户觉得等待事件太长,可能直接想退出该网络应用界面,去做其他的事情,这时我们点击back键需要将dilog关掉,同时关掉AsyncTask 以及中断http操作(该部分以后将详细总结出来),

观察dialog部分的源代码如下所示:

    1. /**
    2. * Called when the dialog has detected the user's press of the back
    3. * key.  The default implementation simply cancels the dialog (only if
    4. * it is cancelable), but you can override this to do whatever you want.
    5. */
    6. public void onBackPressed() {
    7. if (mCancelable) {
    8. cancel();
    9. }
    10. }
    11. 可以得到当有progressdialog出现的时候,我们点击back键的时候 会被dialog的默认onbackPressed获取到,所以当有progressdialog出现的时候,我们想点击back键的时候,能够在onbackPressed方法中去捕获该操作,我们可以这样:
    12. 自己写一个dialog 继承 progressdialog 当然dialog也可义 代码如下:
    13. <pre name="code" class="java">    class myDialog extends ProgressDialog{
    14. private Context context;
    15. public myDialog(Context context){
    16. super(context);
    17. }
    18. @Override
    19. public boolean onKeyDown(int keyCode, KeyEvent event) {
    20. if (keyCode == KeyEvent.KEYCODE_BACK ) {
    21. mProgressDialog.dismiss();
    22. //取消网络操作
    23. cancelLoad();
    24. }
    25. return super.onKeyDown(keyCode, event);
    26. }
    27. }</pre><br>
    28. 这样我们在有窗口显示的activity时就能够利用此方法捕获该back键后退的动作响应,实现我们想要的操作,如上,我想要进行async的cancel操作。<br>
    29. <br>
    30. <br>
    31. <br>
    32. <pre name="code" class="java">   class LoadSearchTask extends AsyncTask<Void, Void, List<Station>> {
    33. public void cancelTask() {
    34. Status status = getStatus();
    35. MyLog.d("status = " + status);
    36. switch (status) {
    37. case PENDING:
    38. cancel(true);
    39. break;
    40. case RUNNING:
    41. cancel(true);
    42. Net.abort();
    43. break;
    44. case FINISHED:
    45. cancel(true);
    46. break;
    47. default:
    48. break;
    49. }
    50. }</pre><br>
    51. 基本实现过程就这样,有个截图就好了<br>
    52. <br>
    53. <br>
    54. <br>
    55. <br>
    56. <br>
    57. <br>
    58. <br>
    59. <br>
    60. <br>
    61. <br>
    62. <br>
    63. <br>
    64. <br>
    65. <br>
    66. <br>
    67. <br>
    68. <br>
    69. <br>
    70. <br>
    71. <br>
    72. <br>
    73. <br>
    74. <br>
    75. <br>
    76. <pre></pre>
    77. <pre></pre>
    78. <pre></pre>
    79. <pre></pre>

当点击onBackpress方法或者onKeyDown方法时出现不能响应的问题解决办法的更多相关文章

  1. android 点击返回键退出程序的方法

    android 点击返回键退出程序的方法 第一种: 再按一次返回键退出程序 private long exitTime = 0; @Override public boolean onKeyDown( ...

  2. Android中点击隐藏软键盘最佳方法——Android开发之路4

    Android中点击隐藏软键盘最佳方法 实现功能:点击EditText,软键盘出现并且不会隐藏,点击或者触摸EditText以外的其他任何区域,软键盘被隐藏: 1.重写dispatchTouchEve ...

  3. android dialog 原来dialog对话框也有自己的按键监听事件 onKeyDown方法

    探讨在一个activity中按menu键时弹出自己定义的dialog(自定义菜单对话框)时,再按一次手机的menu键发现这个自定义的dialog菜单并没有关闭,原来是这个dialog内部也有onKey ...

  4. 在Activity中响应ListView内部按钮的点击事件的两种方法!!!

    在Activity中响应ListView内部按钮的点击事件的两种方法 转载:http://www.cnblogs.com/ivan-xu/p/4124967.html 最近交流群里面有人问到一个问题: ...

  5. PHPCMS v9点击量增加值加大的方法

    PHPCMS v9点击量增加值加大的方法 在根目录/api 50行 $views = $r['views'] + 1; 修改数字1即可修改每次刷新页面点击量增加的数值.

  6. 设置TabWidget的样式的方法、关联Fragment与tabwidget的方法、点击tab显示相应Fragment方法

    private void updateTabHost(TabHost tabHost) { int count = tabHost.getTabWidget().getChildCount(); ; ...

  7. div加链接 html给div加超链接实现点击div跳转的方法[申明:来源于网络]

    div加链接 html给div加超链接实现点击div跳转的方法[申明:来源于网络] 地址:http://www.cdxwcx.com/faq/htmldivLink.html

  8. (网页)angular中实现li或者某个元素点击变色的两种方法(转)

    转自脚本之家: 本篇文章主要介绍了angular中实现li或者某个元素点击变色的两种方法,非常具有实用价值,需要的朋友可以参考下 本文介绍了angular中实现li或者某个元素点击变色的两种方法,分享 ...

  9. thinkPHP5.0框架验证码调用及点击图片刷新简单实现方法

    这篇文章主要介绍了thinkPHP5.0框架验证码调用及点击图片刷新简单实现方法,结合简单示例形式分析了thinkPHP5框架验证码相关配置.后台验证.前台刷新等操作技巧,学习thinkphp源码的朋 ...

随机推荐

  1. zookeeper的部署

    http://blog.csdn.net/hongtu1993/article/details/53215587http://www.centoscn.com/image-text/install/2 ...

  2. QWidget子窗口中setStyleSheet无效,解决方法

    继承 QWidget setStyleSheet无效,解决方法. 发现 继承自QWidget的自定义类 ,使用setStyleSheet无效, 如果删除头文件中的 Q_OBJECT,setStyleS ...

  3. Django修改用户名密码的方法

    1.python manage.py shell 2.from django.contrib.auth.models import User 3.user=User.objects.get(usern ...

  4. jQuery attr方法修改onclick值

    了通过jQuery的attr修改onclick值. 代码: var js = "alert('B:' + this.id); return false;"; var newclic ...

  5. 将一个4X4的数组进行逆时针旋转90度后输出,要求原数组数据随机输入

    //将一个4X4的数组进行逆时针旋转90度后输出,要求原数组数据随机输入 #include<stdio.h> int main() { int a[4][4],b[4][4],i,j;// ...

  6. ORACLE 多列合并成一行数据 WM_CONCAT函数以及REPLACE

    WM_CONCAT()方法 注意字符长度 SELECT BERTHCODE,tpf.freedatetype, ( SELECT WM_CONCAT(SBPT.PARKSTIME||'~'||SBPT ...

  7. Ubuntu 12.04下mysql的安装与配置

    转自:http://blog.csdn.net/ichsonx/article/details/9285935 准备  0. 获取 mysql-5.5.15-linux2.6-i686.tar.gz ...

  8. ClouderaManager之CDH-LZO配置

    CDH-LZO配置 下载和CDH版本对应的hadoop-lzo版本 如下: 下载地址:http://archive.cloudera.com/gplextras5/parcels/ 需要下载如下三个文 ...

  9. java 从数据库取值反射给变量

    在 javaweb开发中,往往一些通用的属性都定义到常量类中,而常量类中的常量又怎么赋初始值呢,可以再配置文件,可以直接赋值,可以在webstart的时候从数据库查询出来数据赋值 从数据库查询数据出来 ...

  10. my.cnf 配置详解

    调整MySQL运行参数,修改/etc/my.cnf文件调整mysql运行参数重启MySQL后生效,在MySQL4版本以后,一部分内部变量可以在MySQL运行时设置,不过重启MySQL就失效了. mys ...