2012-03-30 107 views
3

在我的android应用程序中,我有以下要求。在android中的活动之间切换?

活性A - >活动B(转到A选项) - >活动C(去选项,请转至B选)

1)去活性甲从活动B我用onBackPressed()方法。

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

那些工作正常。

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

我该怎么做?

编辑了1:

活动A是我的主要活动,我不希望使用Intent.i想从活动ç恢复活动重启活动(就像我通过使用活动B一样。 onBackPressed)。

编辑2(附答案):

玉家伙。谢谢大家给我你问题的帮助。最后我发现了一个类似于@Paresh Mayani的答案的简单答案。

答:

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

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

+2

什么是使用你的意图的问题? – COD3BOY 2012-03-30 04:50:12

+0

活动A是我的主要活动我不想通过使用Intent重新开始活动。我想从活动c继续活动A(就像我通过使用onBackPressed从活动B那样)清除? – 2012-03-30 04:55:41

回答

5

我认为你不想使用意图,因为每当你使用Intent移动到活动时按下回车键将移到上一个活动(活动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标志代替,这将移动到活动一个不清除任何活动。

如需了解更多,请查询this

+1

为什么这个答案是downvoted ???它的正确答案我相信。 – 2012-03-30 05:01:40

+2

我想有人不喜欢它,人们不会欣赏其他人在帮助他们的时间。 – Mayank 2012-03-30 05:05:12

+0

那些谁downvoting,请写一个实际**原因**! – 2012-03-30 05:06:58

0

可以passon活动B到活动C的范围内,然后在活动调用C

((Activity) bContext).finish(); 

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

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

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

+2

如果以前的活动已经完成了OS ...例外..?..只是出于好奇.. – ngesh 2012-03-30 04:55:44

+2

@sandy好点,如果前面的活动被OS关闭,那么上下文将是NULL,所以你说那里会有一个例外,NPE。 – Mayank 2012-03-30 04:59:12

+0

是的,它是....任何想法? – 2012-03-30 05:02:23

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

在活动Ç

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

用于使用'startActivityForResult'。 – 2012-03-30 05:17:47

+0

谢谢终于有人在这里,这使我的回答 – jeet 2012-03-30 05:20:35

+0

是一些注意为什么不,但使用FLAG_ACTIVITY_CLEAR_TOP将无法正常工作,因为用户不希望活动A重新创建和使用FLAG_ACTIVITY_CLEAR_TOP它会重新创建。相反,startActivityForResult是一个不错的选择。 – 2012-03-30 05:24:02

1

如果你想然后重新创建你的活动,你可以使用FLAG_ACTIVITY_SINGLE_TOP

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

通过这样的活动为您将无法重新创建,而您将不得不覆盖将在您的活动A中调用的onNewIntent()

UPDATE:

这是使用Intent但根据您的要求是不使用Intent,所以在这种情况下,更好的办法是使用startActivityForResult因为已经有几个答案,上面我不是阐述了。

+0

@帕里斯Mayani ..你需要再看一遍..国旗是差异在这里... – ngesh 2012-03-30 05:09:53

+0

@Mayank啊!真的是它的复制粘贴? – 2012-03-30 05:10:50

+0

男人,@sandy你有一个捕捉错误的眼睛....:)...和对不起Lalit – Mayank 2012-03-30 05:11:22

3

可靠的解决方案是..

你开始活动使用StartActivityForResult()

而且根据具体的情况您在活动设置结果代码..事情是这样的..

GO_TO_ACT_A = 1; GO_TO_ACT_B = 2;

而在所有活动比较onActivityResultMethod检查结果代码..

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

是的,这是一个很好的。 .. :) – Mayank 2012-03-30 05:09:09

+1

嘿是我的答案不解决同样的解决方案? – jeet 2012-03-30 05:12:08

+0

@jitendrasharma ..可能..但我真的没有看到..和我很久以前给出的相同的答案..我不记得那是那..这就是为什么我告诉他谷歌它.. – ngesh 2012-03-30 05:18:55

0

为什么你不能使用,

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

” ... 这个方法被调用之前的活动可能是这样在未来一段时间它会恢复其状态,例如,如果活动B在活动A前面发起,并且在某个时间活动A被杀死以回收资源,则活动A将有机会保存用户的当前状态通过这种方法,以便当用户返回到活动A时,用户界面的状态可以通过onCreate(Bundle)或onRestoreInstanceState(Bundle) ...“

我认为这就是你想要的。有了这个,你可以在Activity C中使用Intent。是的,然后它转到onCreate方法,但是在那里你检查是否有任何保存的实例。如果有任何保存的实例,则不需要加载onCreate项目的其余部分。它会加快你的应用程序。

0

你可以做到这一点是:

回去按选项:

  1. onBackPressed(){ @覆盖 公共无效onBackPressed(){

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

    }

使用按钮:

  1. button.setOnClickListener(新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 
    }});