簡體   English   中英

如何從堆棧刪除舊活動? (正確的方法)

[英]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意味着REORDERCLEAR_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM