一般来讲,当我们点击手机上的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. github贡献代码步骤

    1.在github上fork项目.fork:在自己github仓库创建一个与该项目内容一样的同名项目,你可以在这个新项目里自由的修改内容. 2.在本地电脑git自己github仓库项目下来.如果直接g ...

  2. Java:集合,Collections工具类用法

    Collections工具类提供了大量针对Collection/Map的操作,总体可分为四类,都为静态(static)方法: 1. 排序操作(主要针对List接口相关) reverse(List li ...

  3. 关于XILINX芯片IO管脚的上拉电阻的疑问

    XILINX的每个IO脚都有一个可选的可配上拉电阻功能,现在我在配置文件的UCF里使用了这个上拉电阻:语法如下:NET"I_key_data"        LOC = " ...

  4. 【Android】3.21 示例21—兴趣点收藏功能

    分类:C#.Android.VS2015.百度地图应用: 创建日期:2016-02-04 简介:介绍如何创建.管理本地收藏的兴趣点数据 详述: (1)新建本地点收藏: (2)查看已收藏本地点: (3) ...

  5. Python 訪问Google+ (http)

    CODE: #!/usr/bin/python # -*- coding: utf-8 -*- ''' Created on 2014-8-28 @author: guaguastd @name: l ...

  6. cocos2d-x画线

    在class HelloWorld : public cocos2d::CCLayer中添加 void draw(); 实现: void HelloWorld::draw() { CCSize s = ...

  7. XMLHttpRequest使用详解

    1.什么是XMLHttpRequest XMLHttpRequest是一个浏览器接口,使得Javascript可以进行HTTP(S)通信,这就是我们熟悉的AJAX.早期,各个浏览器的实现都不同,HTM ...

  8. 每日英语:China Underwhelmed After First Apple Event

    Apple's roll-out of its latest iPhones landed with a thud in China, the company's biggest foreign ma ...

  9. nyoj116 士兵杀敌(二)树状数组 插点问线

    士兵杀敌(二) 时间限制:1000 ms  |  内存限制:65535 KB 难度:5 描述 南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的. 小工是南将军手下的军师,南将军经常想知 ...

  10. java质量提升相关

    http://blog.sina.com.cn/s/blog_6814a1510102v2rp.html