2013-04-05 102 views
0

我有MainActivity.java,我想從它打開Activity A如何在創建第一個實例後從一個活動移動到另一個活動?

假設我從MainActivity打開ActivityA,我會使用此代碼:

Intent i = new Intent(this,A.class); 
startActivity(i); 

當我在活動A,我按後退按鈕。後退按鈕將完成活動A並返回主活動。所以如果我重新啓動活動A,它將從頭開始重新啓動。這不是我想要的。我只想從活動A創建一個實例,所以如果我從A移動到MainActivity儘可能多的次數,我不想重新啓動它將保持最後一個狀態。

+0

只是想知道不應該將'A.class'作爲第二個參數而不是'A.java'? – SudoRahul 2013-04-05 03:43:12

+0

你是對的,我很抱歉,我改正了它 – Alex 2013-04-05 03:43:50

+0

你可以直接調用finish()。 – Unknown 2013-04-05 03:58:31

回答

1

當MainActiivty開始另一項活動時,新活動即活動A被推到堆棧的頂部,並將焦點上一個活動保留在堆棧中,但是停止當活動停止時,系統保留其用戶界面的當前狀態。

當用戶按下返回按鈕,當前活動是從堆棧的頂部彈出(活性被破壞)和先前活動恢復(其UI的先前狀態被恢復)。堆棧中的活動不會重新排列,只能從堆棧中推送並彈出 - 在當前活動啓動時推送到堆棧,並在用戶使用「後退」按鈕離開時彈出。因此,後堆棧作爲「後進先出」對象結構運行。

注意:多個任務可以一次在背景中進行。但是,如果用戶同時運行多個後臺任務,系統可能會開始銷燬後臺活動以恢復內存,從而導致活動狀態丟失。

在活動A的MainActivity中,按下後退按鈕,活動A將以棧形式堆疊並銷燬。

再次從MainActivty導航到A,活動被重新創建,因爲它被銷燬。這是它的工作原理。

欲瞭解更多詳情,請看以下鏈接中的後退堆棧。

http://developer.android.com/guide/components/tasks-and-back-stack.html

android:launchMode 

上的活動應該如何啓動的指令。有四種模式與Intent對象中的活動標誌(FLAG_ACTIVITY_ *常量)一起工作,以確定在調用活動來處理意圖時應該發生什麼。

它們是:

  1. 標準
  2. singleTop
  3. singleTask
  4. singleInstance

http://developer.android.com/guide/topics/manifest/activity-element.html#lmode

但是,一旦活動被破壞,並且您需要導航到該活動,則會重新創建該活動。

+0

感謝您的詳細解釋!所以你說我不能用'意圖'來達到我想要的。我應該使用「Tab」嗎? – Alex 2013-04-05 05:38:40

相關問題