2010-08-17 77 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()方法,将显示您已经覆盖的对话框。