5

我有 5 个不同屏幕的多项活动。如果在第一个屏幕和其他屏幕中按下后退键,我应该如何处理?finish() 和 System.exit() 不起作用..如果按下后退按钮,我应该怎么做才能退出我的应用程序?以下编码不起作用?请建议我退出具有多个屏幕的应用程序的方法

 public boolean onKeyDown(int keyCode, KeyEvent event) 
 {
    if (keyCode == KeyEvent.KEYCODE_BACK) 
     {
        AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(
                this);

        new AlertDialog.Builder(this) .setMessage("Are you sure you want to exit?")
           .setCancelable(true)
          .setPositiveButton("Yes", new DialogInterface.OnClickListener() 
           { 
             public void onClick(DialogInterface hi, int dd) 
             {

                Intent exitIntent = new Intent(Mapper.this,SplashActivity.class);
                exitIntent.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP|Intent.FLAG_ACTIVITY_CLEAR_TOP);
                SplashActivity.mHandler.sendEmptyMessage(0);                   
                startActivity(exitIntent);    


             }
           }
          )
         .setNegativeButton("Cancel", new DialogInterface.OnClickListener() 
         { 
           public void onClick(DialogInterface hi, int dd) 
           {

           }
         }
         );
        AlertDialog alertDialog = alertDialogBuilder.create();

            // show it
            alertDialog.show();
      //AlertDialog alert1 = alt_bld.create();
      //alert1.setTitle("EXIT");
      //alert1.show(); 
       return true; 
     }
     return super.onKeyDown(keyCode, event);
 }

  And in Start.Class:
  public boolean onKeyDown(int keyCode, KeyEvent event) 
{
    if (keyCode == KeyEvent.KEYCODE_BACK || keyCode == KeyEvent.KEYCODE_HOME) 
    {
        mHandler.removeCallbacksAndMessages(null);
        SplashActivity.this.finish();
    }

    return super.onKeyDown(keyCode, event); 
}
4

5 回答 5

6

像这样覆盖onBackPressed()...

@Override
public void onBackPressed()
{
    finish();  
}
于 2012-11-14T21:45:52.247 回答
0

首先,你是想说你想要这样吗?

Activity1 --> Activity2 --> Activity3 --> Activity4 --> Activity5

当前活动是 Activity5。后压。退出整个应用程序?您是否想在您当前正在进行的任何活动中退出应用程序?像Activity3一样,按下然后退出?如果是,您可以在调用者活动的每次 startActivity() 调用之后调用 finish() 。或者您可以选择在您调用的每个活动上使用结果变量。例如,您可以从 Activity1 调用 Activity2,方法是通过 staryActivityWithResult() 调用它并在源 Activity - Acitivity1 的 onActivityResult() 方法中等待其结果。因此,如果在 Activity2 上按下背面,则在完成之前将一些变量传递给 Activity2 的 setResult() 方法。然后这个结果将被传递给调用者 Activity1,然后你现在可以根据你传递的结果做任何你想做的事情。

于 2012-11-15T00:36:22.457 回答
0

为什么要在按下后退按钮时退出?这不是类似android的行为。通过按下返回,用户通常想要返回到之前的活动,而不是退出您的应用程序。Android 将在需要时自行销毁活动。

于 2012-11-14T21:56:28.630 回答
0

您肯定在寻找的是 onBackPressed:

@Override
public void onBackPressed() {
    //do your intent here
}

我不确定从上下文中是什么:

SplashActivity.mHandler.sendEmptyMessage(0); 

这条线确实如此,但除此之外,您的原始意图应该回到您的初始屏幕。我会做什么,如果你真的想在后按时退出你的应用程序,我会在那里放一些数据,比如

exitIntent.putExtra("toExit", true);

基本上只是一个标志,您的启动活动可以读入并决定自行调用 finish() 。手动关闭应用程序的唯一“好”方法是完成第一个活动(尽管实际上很少强制用户退出您的应用程序)

编辑:好的,所以在您返回的应用程序中(看起来像 SplashActivity),您将在 onCreate 中寻找一个意图,如下所示:

Intent i = getIntent();
Bundle extras = i.getExtras();

Boolean toExit = extras.getString("toExit");
if(toExit){
    finish();
}
于 2012-11-14T21:49:13.213 回答
0

在任何活动中退出您的应用程序。按着这些次序:

1-在活动中制定意图,从您要退出应用程序的位置:

Intent intent = new Intent(thisActivity.this, FirstActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); intent.putExtra("EXIT", true); startActivity(intent);

2-在您的第一个活动中,在 onCreate() 方法中将其写为:

if (getIntent().getData()!= null) {

if (getIntent().getBooleanExtra("EXIT", false)) 
{
    finish();
}
}
于 2019-09-22T10:52:12.267 回答