2012-11-14 245 views
3

我有5个不同的屏幕多个活动。如果在第一屏幕和其他屏幕中按下后退键,我应该如何处理情况?完成()和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

回答

6

就覆盖onBackPressed()这样的应用程序...

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

我有5个活动......我已经使用了上面的代码,就像你说的那样..并且在调用每个活动之后使用finsh()..但是应用程序将进入前一个屏幕但不退出..我应该怎么做在2或3屏幕退出?我学会了我们已经从堆栈中弹出活动,但我应该怎么做? – Sindu

+2

试试'super.onBackPressed();' –

+1

如果你想一次关闭一堆活动,你必须使用'startActivityForResult(inent,R.id.(); @Override 保护无效onActivityResult(int requestCode,int resultCode,Intent数据);当开始另一个活动,当你想关闭活动时, { \t if(requestCode == R.id.your_button && resultCode == RESULT_OK) \t {setResult(RESULT_OK);完(); }' –

0

什么你肯定要找的是onBackPressed :

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

我不是从上下文知道是什么:

SplashActivity.mHandler.sendEmptyMessage(0); 

这一行确实如此,但除此之外,您的原意应该回到您的启动画面。我会做什么,如果你真的想离开你的背部按应用程序,我会把一些数据有,说

exitIntent.putExtra("toExit", true); 

基本上只是你飞溅的活动可以读取并决定呼吁结束标志()本身。手动关闭应用程序的唯一“良好”方式是完成第一个活动(尽管实际上它很难强制用户退出您的应用程序)

编辑: 确定在您的应用程序中,您可以返回(外观像SplashActivity),你要去寻找意向中的onCreate像这样:

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

Boolean toExit = extras.getString("toExit"); 
if(toExit){ 
    finish(); 
} 
+0

我已经使用完成()后调用每个活动的意图..但笏它的确是它返回到之前的活动,而不是退出应用程序...这里有什么解决方案.. – Sindu

+0

看看我的编辑到我的答案。你应该在活动中回应完成。你将通过在意图中放置一个布尔值来实现,然后在onCreate中检查你的第一个活动。如果它看到的意图,它调用完成,应用程序应该退出 – Jameo

0

为什么你想后退按钮按下退出上呢?这不是类似于Android的行为。按回来用户通常要返回到以前的活动,但不是要退出您的应用程序。 Android会在需要时处理自己的活动破坏。

+0

据我浏览和看到背按下使应用程序退出我是错误的/ – Sindu

+0

上按下将只退出您的应用程序,如果它是根活动(或您在应用中创建的第一项活动) – Jameo

+0

@Sindu Jameo是wright。返回通常意味着“返回”,但不能退出。 Android不同于桌面操作系统......这里有很多相同的问题,尝试搜索以了解它是如何工作的。 – Prizoff

0

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

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

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

+0

雅这是我想要的笏,但如果我使用完成()我的应用程序不退出? – Sindu