[英]How to remove old activities from backstack? (true way)
我是Android開發的新手,這是我的問題:
我有2個活動:A和B。從A,我通過startActivity(new Intent(A.this, B.class))
調用B
從B,我做一些事情,然后以相同的方式返回A: startActivity(new Intent(B.this, A.class))
但是,在new-A上,我按“后退”按鈕,首先看到B類,然后看到舊的(不變的版本)A類。
我試過放置finish();
在onPause()
方法中。 但是,然后我的活動因方向更改而崩潰。
如何正確控制后台活動? 提前致謝。
聽起來好像不必調用startActivity
返回A
,而只需調用finish()
;。 這將使您回到上一個Activity
。
或者,如果您使用FLAG_ACTIVITY_CLEAR_TOP
則可以完成相同的操作:
Intent intent = new Intent(B.this, A.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(intent);
關於接受的答案的建議是使用FLAG_ACTIVITY_REORDER_TO_FRONT
對於您的情況,這實際上並不重要。 但是在稍微不同的情況下,如果您擁有A-> B-> C並使用REORDER返回A,則實際上最終會得到一個看起來像B-> C-> A的堆棧。 使用CLEAR_TOP,您最終只會得到A。關鍵是, REORDER
意味着REORDER
, CLEAR_TOP
應該彈出后棧。 在您的簡單情況下,它們恰好可以達到相同的目的,但我認為最好是按預期使用標志。
StartActivityForResult或考慮使用片段。 如果您需要在各種活動之間切換,請考慮一下為什么要這樣做? 如果您要在兩者之間傳遞信息,則有兩種選擇。 片段為您提供了選擇,您可以將數據保存在承載片段的Activity上,也可以讓Singleton駐留在要擴展的Application類中。
在不帶任何其他標志的情況下調用startActivity
,將創建指定的Activity的新實例。 這意味着您的后排堆棧看起來像這樣:
A -> B -> A(2)
您有兩種選擇:
第一種選擇是,您可以在Intent上添加標志,指示它在后堆棧中已經存在的A進行重新排序。 注意,這不會關閉B; 您必須隨后在B中調用finish()
。
Intent intent = new Intent(B.this, A.class);
intent.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
startAcvitiy(intent);
finish();
第二種選擇是在A中使用startActivityForResult
而不是startActivity
,並讓Activity B將結果傳遞回A。我認為這更加簡潔,它為您提供了一種非常簡單的方法來對B完成時發生的情況做出反應(例如,您可以更新您的用戶界面)。 請參閱Android開發者網站上的本指南 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.