返回按钮按下

5

我有多个活动(activities),包含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); 
}

3
很多人尝试帮助你解决这个问题,他们都是正确的。要么接受一个答案,要么就更明确地表达你的问题。 - Jameo
5个回答

6

只需像这样覆盖 onBackPressed() 方法即可...

@Override
public void onBackPressed()
{
    finish();  
}

我有5个活动...我按照你说的使用了上面的代码,并在调用每个活动后使用了finish(),但应用程序返回到上一个屏幕而不是退出..我该怎么做才能在第2或第3个屏幕中退出?我学到了我们需要将活动从堆栈中弹出,但我该如何做呢? - Sindu
2
尝试使用 super.onBackPressed(); - Artyom Kiriliyk
1
如果您想一次关闭一堆活动,必须在启动另一个活动时使用 startActivityForResult(inent, R.id.your_button);,并且在想要关闭活动之前,在 onActivityResult 中添加 setResult(RESULT_OK);,然后再添加 finish();@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == R.id.your_button && resultCode == RESULT_OK) { setResult(RESULT_OK); finish(); } - Artyom Kiriliyk

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();
}

我在调用每个活动意图后都使用了finish()。但是它所做的是返回到之前的活动而不是退出应用程序...这里的解决方案是什么... - Sindu
看看我对答案的修改。你也应该在返回的活动中调用finish。你可以通过在意图中放置一个布尔值,然后在第一个活动的onCreate中检查它来实现这一点。如果它看到了这个意图,它就会调用finish,应用程序应该退出。 - Jameo

0

首先,您是想说您希望它像这样吗?

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

当前活动是Activity5。返回按下。退出整个应用程序?您是否希望在无论您处于哪个当前活动时按下返回键时退出应用程序?例如,如果在Activity3中按下返回键,则退出?如果是的话,您可以在调用者活动上每次startActivity()调用后调用finish()。或者您可以选择在调用的每个活动上使用结果变量。例如,您可以通过调用staryActivityWithResult()从Activity1调用Activity2,并在源Activity - Acitivity1的onActivityResult()方法中等待其结果。因此,如果在Activity2上按下返回键,在finisihing之前将一些变量传递给Activity2的setResult()方法。然后,该结果将传递给调用者Activity1,然后您现在可以根据传递的结果执行所需的操作。


是的,这就是我想要的,但如果我使用finish(),我的应用程序就无法退出? - Sindu

0
为什么你想要在按下返回按钮时退出应用呢?这不是 Android 的行为方式。用户通常按下返回键是想返回到上一个活动,而不是退出你的应用。Android 会在需要时自行处理活动销毁。

据我浏览和观察,按下返回键会使应用程序退出。我错了吗? - Sindu
仅当返回按键被按下时,如果它是根活动(或您在应用程序中创建的第一个活动),则会退出您的应用程序。 - Jameo
@Sindu Jameo是正确的。Back通常意味着“返回”,但不是退出。Android与桌面操作系统的播放方式不同...这里有很多关于此问题的相同问题,请尝试搜索以了解其工作原理。 - Prizoff

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();
}
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接