2012-03-30 158 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 
    }});