在android中切换活动?

时间:2012-03-30 04:43:34

标签: android android-activity

在我的Android应用程序中,我有以下要求。

  

活动A - >活动B(转到A选项) - >活动C(转到A选项,转到B选项)

1)要从活动B转到活动A,我使用了onBackPressed()方法。

2)要从活动C转到活动B,我再次使用onBackPressed()方法。

那些工作正常。

3)现在我想从活动C转到活动A(没有意图调用)。

我该怎么做?

已编辑1:

活动A是我的主要活动我不想通过使用Intent来重启活动。我希望从活动c恢复活动A(就像我通过使用onBackPressed从活动B那样做)。

已编辑2(有答案):

好的伙计们。谢谢大家在我的问题上给我你的帮助。最后我找到了一个类似于@Paresh Mayani答案的简单答案。

答案:

        Intent a = new Intent(getApplicationContext(),ActivityA.class);
        a.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
        startActivity(a);

通过使用解决了我的问题的link,我得到了这个很好的解决方案。再次感谢大家,我真的很感激。

7 个答案:

答案 0 :(得分:5)

我假设您不想使用Intent,因为每当您使用Intent移动到活动时按Back键将移至上一个活动(活动C)。在这种情况下,我建议你加入FLAG_ACTIVITY_CLEAR_TOP标志。它将破坏之前的所有活动,并允许您转到活动A.

 Intent a = new Intent(this,A.class);
 a.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
 startActivity(a);

或者,您可以尝试使用FLAG_ACTIVITY_REORDER_TO_FRONT标记,该标记将移至活动A而不会清除任何活动。

有关详情,请查看this

答案 1 :(得分:4)

有两种方法可以实现这一点:通过启动Intent应用Intent Filter清除顶层堆栈,但根据您的问题,您对此方法不感兴趣。第二种方法是通过StartActivityForResult启动活动。

使用意图标志:

Intent intent = new Intent(this, A.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);

第二种方式,使用startActivityForResult:

在活动B中:

  Intent intent=new Intent(B.this, C.class);
  intent.startActivityForResult(intent);

onActivityResult方法:

 protected void onActivityResult(int reqCode, int resultCode, Intent data) {
     if (resultCode == Activity.RESULT_OK ) {
         String res = data.getExtras().getString("result");
         if (res.equals("A")) {
             String msg = "RESULT: " + res;
             Toast.makeText(Login2.this, msg, Toast.LENGTH_SHORT).show();
             finish();
         }
     }
 }

在活动C中

 Intent intent = new Intent();
 intent.putString("result", "Hello, World");
 setResult(RESULT_OK, intent);

答案 2 :(得分:3)

可靠的解决方案是......

您可以使用StartActivityForResult()

启动活动

并根据条件在活动中设置ResultCodes ..这样的东西..

GO_TO_ACT_A = 1; GO_TO_ACT_B = 2;

并在所有Activies onActivityResultMethod中检查结果代码..

if(resultCode==GO_TO_ACT_A){
    finish(); //Assuming curently you are in Activity C and wanna go to Activity A
}

答案 3 :(得分:1)

如果您想重新创建活动,则可以使用FLAG_ACTIVITY_SINGLE_TOP

Intent intent = new Intent(this, A.class);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);

这样做不会重新创建活动A,而是必须覆盖将在活动A中调用的onNewIntent()

<强>更新

这是使用Intent,但由于您的要求没有使用Intent,所以在这种情况下,更好的方法是使用startActivityForResult,因为上面有几个答案我没有详细说明它

答案 4 :(得分:0)

您可以将活动B的上下文传递给活动C,然后在活动C中调用

((Activity) bContext).finish();

即关闭活动B,然后你可以调用

((Activity)getContext()).finish();

这将导致活动C关闭并返回活动A,因为活动B已经关闭。

答案 5 :(得分:0)

为什么你不能使用,

@Override
protected void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    //Save your current instance
}

“... 在活动被杀之前调用此方法,以便在将来某个时间返回时可以恢复其状态。例如,如果活动B在活动A前面启动,并且在某些时候活动A被杀死以回收资源,活动A将有机会通过此方法保存其用户界面的当前状态,以便当用户返回活动A时,可以恢复用户界面的状态通过onCreate(Bundle)或onRestoreInstanceState(Bundle) ......“

我认为这就是你想要的。有了这个,您可以使用活动C中的Intent。是的,它会转到onCreate方法,但是您正在检查是否有任何已保存的实例。如果有任何已保存的实例,则无需加载其余的onCreate项。它会加快你的申请速度。

答案 6 :(得分:0)

您可以这样做:

在背面按下选项:

  1. onBackPressed(){ @覆盖 public void onBackPressed(){

    // TODO Auto-generated method stub
        super.onBackPressed();
    //Your method intent
        Intent intent = new Intent(A.this, C.class);
        startActivity(intent);
    

    }

  2. 使用按钮:

    1. button.setOnClickListener(new View.OnClickListener()    {

           public void onClick(View v)
      
           {
      
                   Intent intent = new Intent(A.this, C.class);
               startActivity(intent);
            // finish(); // may use finish if do not want endless loop
      }});