2017-04-11 78 views
1

我有一個應用程序MainActivityChildAaActivityChildBbActivity如何讓我的活動的單個實例與疊堆一起工作?

MainActivity可以將我們發送到任何一個Child活動,並且用戶可以在他們想要的兩個Child活動之間移動。

但是,每個活動只能有一個實例。

問題是,如果我讓孩子活動singleInstance,那麼它們都是獨立的任務,並切換到另一個應用程序,並回到孩子意味着onBackPress我退出程序(當我應該回到MainActivity)

如果我將launchMode作爲標準離開,那麼我會得到多個兒童活動實例,特別是在兩個孩子之間來回移動時。

如果我使用singleTop,然後我有兩個問題

如果我對孩子使用noHistory我不能自由地在它們之間移動(第一回按會回到我MainActivity)

使用isTaskRoot()明顯不會與singleInstance一起修復應用程序退出錯誤,因爲它永遠是真實的(並且對於其他場景無用)

我應該如何正確實現我需要的行爲?

  • 在後面堆
  • 都在同一個任務的每個活動只有一個實例/不退出onBackPress切換應用程序
+1

這是我會怎麼做:有兩個活動,MainActivity和ChildActivity,開始時ChildActivity將顯示任一FragmentA或FragmentB。然後,您可以使用片段事務輕鬆地在FragmentA和FragmentB之間切換,同時保留ChildActivity,並且您還可以在需要時輕鬆導航回MainActivity。 –

回答

1

後,您不需要任何特殊的啓動模式。當你啓動一個子Activity,請使用以下標誌:

intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); 

這將Activity的現有實例移動到任務堆棧的前面(如果有的話),或創建一個新的實例(如果有不是現有的實例)。

+0

謝謝,這似乎是解決方案。我用標誌考慮,但我希望從清單等價物,以避免它曾經被錯過在未來的變化 –

+0

沒有,有沒有辦法從清單中做到這一點。它比配置更具有行爲意義。您是否想要重新使用現有的實例不是您可以配置的。 –

相關問題