android如何?雙擊返回鍵退出 的修正版

來源:互聯網
上載者:User
private static Boolean isExit = false;      private static Boolean hasTask = false;      Timer tExit = new Timer();      TimerTask task = new TimerTask() {                     @Override          public void run() {              isExit = false;              hasTask = true;          }      };      public boolean onKeyDown(int keyCode, KeyEvent event) {                  // TODO Auto-generated method stub                  if(keyCode == KeyEvent.KEYCODE_BACK){  //                        System.out.println("user back down");                          if(isExit == false ) {                                  isExit = true;                                  Toast.makeText(this, "再按一次退出程式", Toast.LENGTH_SHORT).show();                                  if(!hasTask) {                                          tExit.schedule(task, 2000);                                  }} else {                                                                                  }                                  finish();                                  System.exit(0);                          }                  }                                          return false;          }  

 

下面程式是我根據上面網上程式改的。因為那個程式稍微有點瑕疵,問題是:當按下返回鍵後,2秒後再按返回鍵,這時isExit已經被設定為true,不能在第三次按返回鍵時起到想要的效果,而是直接退出。

我的想法,只要使用者按下返回鍵就設定一個定時器來監控是否2秒內實現了退出,如果使用者沒有接著按返回鍵,則清除第一次按返回鍵的效果,使程式還原到第一次按下返回鍵之前的狀態。這個定時器是每次使用者按下返回鍵才去建立,而不是像上面程式啟動就已經建立。

 @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) { 
        // TODO Auto-generated method stub 
        if(keyCode == KeyEvent.KEYCODE_BACK)
        { 
         exitBy2Click();//調用雙擊退出函數
        }                         
        return false; 
    }

 //準備退出
 private static Boolean isExit = false;   

private void exitBy2Click()
 {  
     Timer  tExit = null;
        if(isExit == false )
        { 
            isExit = true;  //準備退出
            Toast.makeText(this, "再按一次退出程式", Toast.LENGTH_SHORT).show(); 
            tExit = new Timer();
            tExit.schedule(new TimerTask() {           
             @Override 
             public void run() { 
                 isExit = false;  //取消退出            
             } 
         }, 2000); //如果2秒鐘內沒有按下返回鍵,則啟動定時器取消掉剛才執行的任務
       
        }else{                                                                          

            finish(); 
            System.exit(0);        
        }     
 }

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.