2012-03-22 57 views
1

我遇到以下问题:我打开了活动A,从中打开了活动B.然后,我想从B打开活动C,以便在按下背面时按钮,C应用程序应该关闭,而不是返回到前面的(B)活动。我试图使用这里的想法(http://stackoverflow.com/questions/5794506/android-clear-the-back-stack),但他们不工作。我知道如何处理意图,我只对后退导航问题感兴趣。关闭应用程序而不是返回到之前的活动

回答

6

启动活动,这样的..

这活性的

int k=1; 
      Intent i=new Intent(A.this,B.class); 
      startActivityForResult(i,k); 

这活动B

int j=1; 
      Intent i=new Intent(B.this,C.class); 
      startActivityForResult(i,j); 

在活动ç覆盖后退按钮

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
if (keyCode == KeyEvent.KEYCODE_BACK) { 
    setResult(RESULT_OK, null); 
    finish(); 
} 
return super.onKeyDown(keyCode, event); 
} 

并把这个活动B

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode ==1) { 
      if (resultCode == RESULT_OK) { 

      setResult(RESULT_OK, null); 
     finish(); 

      } 
     } 

并把这个活动一

protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
     if (requestCode ==1) { 
      if (resultCode == RESULT_OK) { 
     finish(); 

      } 
     } 
    } 
1

finish()放在活动A和B的onStop()中。这会关闭两个活动,所以当您从活动C中按下返回按钮时,应用程序将退出。这将解决您的问题

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

在BackPress可以使用

System.exit(0); 

完成的应用。

1

我强烈反对调用System.exit(0);

你可以做的是以下几点。活动A在StartActivity(B)之后立即调用finish()。同样,B在startActivity(C)之后立即调用finish()。这样,C是唯一的活动活动,并且按回来停止应用程序。或者说,将其从堆栈中移除。

你不应该在onStop()中调用finish()。在开始新的活动时或在活动中完成处理时调用完成()。

顺便说一下,finish()不会立即完成您的活动。完成被放置在堆栈上,并在当前方法结束后立即执行。同样,startActivity不会立即执行,它会在当前方法结束时执行。

0

您可以使用代码进入设备主屏幕。

  Intent startMain = new Intent(Intent.ACTION_MAIN); 
      startMain.addCategory(Intent.CATEGORY_HOME); 
      startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); 
      startActivity(startMain); 
相关问题