当点击onBackpress方法或者onKeyDown方法时出现不能响应的问题解决办法

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

[java] view plaincopy

  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部分的源代码如下所示:

[java] view plaincopy

    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方法时出现不能响应的问题解决办法

时间: 2024-07-28 18:30:23

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

canvas中的getContext(&quot;2d&quot;)方法在jQuery中的使用中遇到的小问题解决办法

最近在学习HTML5的canvas,在练习过程中我突发奇想,既然原生的js可以完成画图,那么使用jQuery是否一样可以完成画图呢?然后我就开始动手进行试验,但是 var cxt=$("#clock").getContext("2d"); 这一行代码并没有发挥作用,然后我就逛了查阅了一些资料并且逛了一些博客论坛,最终解决了这个问题.只需要改成下面这个样子就好了: var cxt=$("#clock").get(0).getContext(&quo

在cocos2dx的android项目中,怎么让onKeyDown方法执行

首先,进入到引擎目录的cocos\platform\android\java\src\org\cocos2dx\lib,打开Cocos2dxGLSurfaceView.java文件, 找到onKeyDown方法,方法如下: public boolean onKeyDown(final int pKeyCode, final KeyEvent pKeyEvent) { switch (pKeyCode) { case KeyEvent.KEYCODE_BACK: Cocos2dxVideoHelp

点击UIWebView上文字调用方法

有的时候应用中需要通过点击网页中的文字或者按钮调用一个方法或事件,这时需要我们将网页与应用之间建立联系. 1.和服务器人员约定一个协议例如ios:// 2.当点击网页上文字或按钮时,跳转这个约定协议的路径 3.通过webview代理方法监听url,判断是哪个操作决定调用方法. window.location.href = 'iso://openCamer'; #pragma mark - UIWebViewDelegate /** 当webView发送一个请求之前都会调用这个方法, 返回YES,

Unity NGUI监听按钮点击事件的三种方法

NGUI版本:3.6.5 1.直接实现OnClick方法: 创建一个脚本,在脚本中实现OnClick()方法,绑定该脚本到按钮上,点击时就会实现OnClick函数内容: 2.使用SendMessage: 选择按钮后,打开Component——NGUI——Interaction,选择Button Message,为按钮添加一个UIButton Message组件: 然后设置UIButton Message中的参数即可: Target:接收按钮消息的游戏对象: Function Name:接收按钮消

点击Notification自动消失的方法。

点击Notification自动消失的方法:添加一句.setAutoCancel(true)即可. 如下面的代码所示: public class TestAty extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { final NotificationManager notificationManager = (NotificationManager) getSystemService(

Chrome浏览器点击 input file上传按钮时延迟3-5秒的解决方法

1.  Google chrome 浏览器在52版本之后出现一个bug,就是点击 input file上传按钮时反应很慢,需要等待3-5秒种之后才能弹出选择文件的对话框.比如 windows里可能是这样: MAC里可能是这样:

【 reload 方法】该方法强迫浏览器刷新当前页面

  [ reload 方法]该方法强迫浏览器刷新当前页面 ================================================= [一]要求刷新的窗口有一个名称,例如ABC.在要关闭的页面加入        <body onunload="javascript:ABC.location.reload()"> [二]如果要刷新的是将要关闭页面的父窗口,则可以在要关闭的页面加入 <body onunload="javascript:w

Angularjs $scope 里面的$apply 方法 和 $watch 方法

Angularjs $scope 里面的$apply 方法 和 $watch 方法 学习要点:1. Angularjs $scope 里面的$apply 方法2. Angularjs $scope 里面的$watch 方法 1. Angularjs $scope 里面的$apply 方法$apply 方法作用:Scope 提供$apply 方法传播 Model 的变化$apply 方法使用情景:AngularJS 外部的控制器( DOM 事件.外部的回调函数如 jQuery UI 空间等)调用了

UITableView的全部属性、方法以及代理方法执行顺序,看过之后肯定有收获---董鑫

UITableView-------表视图--继承UIScrollView并遵守NSCoding协议 属性 frame-------------设置控件的位置和大小 backgroundColor--------设置控件的颜色 style--------获取表视图的样式 dataSource---------设置UITableViewDataSource的代理 delegate---------设置UITableViewDelegate代理 sectionHeaderHeight------设置