簡體   English   中英

Android中的活動

[英]Activities in Android

關於Android應用程序中的活動,我有一個相當簡單的問題。 我還是個新手。

在我目前的Android應用程序中,我有大約10個活動。 如果其中一個活動已經遠離活動堆棧,我想重新打開它,是否可以調用:

Intent iLogin = new Intent(this,Login.class);
startActivity(iLogin);

如果它仍然有點令人困惑,我會舉一個例子。 應用程序隨活動1一起啟動。然后,用戶打開活動2.稍后,他打開活動3以執行操作。 執行操作后,我希望用戶返回活動1.是否可以調用上面的代碼? 它是從堆棧中獲取活動還是創建新活動? 如果不是,我怎樣才能從堆棧中獲取活動?

更新:我對回收活動感興趣,而不是每次創建新活動。 例如,並非所有活動都需要創建新活動。 其中一些只顯示數據,可以根據用戶請求刷新。

簡而言之:不,您的代碼片段會將新的Login實例推送到活動堆棧。 請在developer.android.com上的Tasks和Back Stack文章中閱讀有關活動堆棧行為的更多信息。

由於后備堆棧中的活動永遠不會重新排列,如果您的應用程序允許用戶從多個活動啟動特定活動,則會創建該活動的新實例並將其彈出到堆棧中(而不是引入任何先前的活動實例)到頂部)。 因此,應用程序中的一個活動可能會多次實例化(甚至來自不同的任務),如圖3所示。

圖3:

圖3

Managing Tasks下,還有一個可能的解決方案。 您可以向Intent添加一個標志 ,指定Android在堆棧上已存在活動時應該執行的操作。 我想說FLAG_ACTIVITY_REORDER_TO_FRONTFLAG_ACTIVITY_CLEAR_TOP可能正是您所尋找的,但絕對可以瀏覽其他選項,因為可能有更適合您的需求。

或者,如果您的應用中的流量允許,您可以在用戶離開時完成活動。 例如,在您的示例中:如果用戶從活動#2導航到活動#3,則完成#2。 從#3按下后退按鈕將導致顯示活動#1,因為那將是堆棧頂部的活動。

我相信你可能想嘗試的標志FLAG_ACTIVITY_REORDER_TO_FRONT使用addFlags()的方法Intent

如果它已經存在於堆棧中,則會將Activity置於堆棧頂部,如果不存在則創建一個新的。

可以調用上面的代碼嗎? 它是從堆棧中獲取活動還是創建新活動? 如果不是,我怎樣才能從堆棧中獲取活動?

答。 如果您使用此代碼,則會在堆棧上創建另一個ur 1st活動實例,而且不是沒有。


好。 這是基於上面的例子的答案:

我建議你使用startActivityForResult()從Activity 1調用Activity 2

在這里,Activity 2將表現為子活動...你可以setResult並在第二個Activity成功完成其任務時調用finish() ...

但在finish()之前添加一個類似於的布爾值:

 i.putExtra("passed2nd", true);

這將表明用戶已經完成了第二次活動

現在,你應該在第一個活動中覆蓋onActivityResult()

在這里你可以檢查請求代碼並從第二個活動中檢索布爾額外的..


現在,重要的部分:根據布爾值是否為真,你可以決定使用帶有不同請求代碼的startActivityForResult()調用第三個活動,

此外,在你的onActivityResult() ,你可以再次檢查請求代碼,並在活動3結束時按照你的意願行事

所以現在當第3次活動成功結束時,控制將返回到第1次活動

這是一個讓你開始的例子

我建議使用FLAG_ACTIVITY_CLEAR_TOP

Activity 1 -> Activity 2 -> Activity 3所以在Activity 3你想回到Activity 1嗎? 我假設您不希望Activity 2仍在運行,因此您應該使用FLAG_ACTIVITY_CLEAR_TOP以便中間的所有內容都將關閉

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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