2010-08-17 80 views
10

我的應用鏈接了一些活動。後退按鈕和最後一個活動

如果你按下後退按鈕,你回到舊的活動,然後你突然退出應用程序!

,所以我需要顯示一個消息,如「你真的想退出,」如果它是在堆棧中的最後一項活動

我知道如何重寫後退按鈕,但我不明白怎麼知道多少活動在歷史上

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { 
     // Is it the last activity on stack ? 
     // so show confirm dialog 
     return true; 
    } 

    return super.onKeyDown(keyCode, event); 
} 

請幫忙。

+0

您的應用程序沒有主要的根級活動,您可以假定這是真的嗎? – iandisme 2010-08-17 21:54:27

+6

作爲一個方面說明 - 我會卸載任何錯誤的應用程序,當我嘗試退出後退按鈕。這是一個手機應用程序,不是一個大的桌面應用程序。 – EboMike 2010-08-17 22:01:01

+0

我同意EboMike。劫持後退按鈕不是一個好主意 – Falmarri 2010-08-17 22:13:42

回答

14

可以實現,使用面漆()函數

public void finish() { 
     AlertDialog.Builder builder = new AlertDialog.Builder(this); 
     builder.setMessage("do you really want to exit?"); 
     builder.setCancelable(false); 
     builder.setPositiveButton("Yes", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       quit(); 
      } 
     }); 
     builder.setNegativeButton("No", new DialogInterface.OnClickListener() { 
      public void onClick(DialogInterface dialog, int id) { 
       dialog.cancel(); 
      } 
     }); 
     AlertDialog alert = builder.create(); 
     alert.show(); 
    } 

    public void quit() { 
     super.finish(); 
    }; 
0

你不需要知道有多少活動是history.You可以做的時候後退按鈕是這個way.Invoke onBackPressed()的方法然後在主要活動中覆蓋finish()方法以顯示確認對話框。因爲onBackPressed()方法調用activity的finish()方法。當支持主活動時,調用覆蓋的finish()方法,將顯示您已經覆蓋的對話框。