zoukankan      html  css  js  c++  java
  • 当点击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.   
      12. 可以得到当有progressdialog出现的时候,我们点击back键的时候 会被dialog的默认onbackPressed获取到,所以当有progressdialog出现的时候,我们想点击back键的时候,能够在onbackPressed方法中去捕获该操作,我们可以这样:  
      13. 自己写一个dialog 继承 progressdialog 当然dialog也可义 代码如下:  
      14.   
      15. <pre name="code" class="java">    class myDialog extends ProgressDialog{  
      16.         private Context context;  
      17.           
      18.         public myDialog(Context context){  
      19.            super(context);  
      20.         }  
      21.   
      22.         @Override  
      23.         public boolean onKeyDown(int keyCode, KeyEvent event) {  
      24.             if (keyCode == KeyEvent.KEYCODE_BACK ) {   
      25.                 mProgressDialog.dismiss();  
      26.                 //取消网络操作  
      27.                 cancelLoad();  
      28.             }  
      29.             return super.onKeyDown(keyCode, event);  
      30.         }  
      31.     }</pre><br>  
      32. 这样我们在有窗口显示的activity时就能够利用此方法捕获该back键后退的动作响应,实现我们想要的操作,如上,我想要进行async的cancel操作。<br>  
      33. <br>  
      34. <br>  
      35. <br>  
      36. <pre name="code" class="java">   class LoadSearchTask extends AsyncTask<Void, Void, List<Station>> {  
      37.   
      38.         public void cancelTask() {  
      39.             Status status = getStatus();  
      40.             MyLog.d("status = " + status);  
      41.             switch (status) {  
      42.                 case PENDING:  
      43.                     cancel(true);  
      44.                     break;  
      45.                 case RUNNING:  
      46.                     cancel(true);  
      47.                     Net.abort();  
      48.                     break;  
      49.                 case FINISHED:  
      50.                     cancel(true);  
      51.                     break;  
      52.                 default:  
      53.                     break;  
      54.             }  
      55.         }</pre><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. <br>  
      77. <br>  
      78. <br>  
      79. <br>  
      80. <br>  
      81. <pre></pre>  
      82. <pre></pre>  
      83. <pre></pre>  
      84. <pre></pre>  
  • 相关阅读:
    我们应当如何做需求分析
    C++ 转型动作 尽量避免 以及 那些意想不到的威胁
    Jetty学习二:配置概览-怎么配置Jetty
    Android手机APN设置(中国移动 联通3G 电信天翼),解决不能上网的问题
    CreateFile使用方法和样例
    Installation of NVIDIA Drivers in RHEL/CentOS and Fedora
    【视频分享】Liger UI实战集智建筑project管理系统配商业代码(打印报表、角色式权限管理)
    JAVA实现HTTPserver端
    LeetCode: Implement strStr() [027]
    c++反汇编与逆向分析 小结
  • 原文地址:https://www.cnblogs.com/kobe8/p/3795746.html
Copyright © 2011-2022 走看看