2013-03-15 116 views
6

我有兩項活動MainActivityNextActivity。從MainActivity我可以去NextActivity,然後用Intent回到MainActivity。但然後OnCreate和其他的東西將被調用,它會像所有的東西都被初始化了。我想回到狀態,就像我進入NextActivity之前一樣。Android返回上一活動

我意識到,如果我在手機上使用物理後退按鈕,就可以實現這一點。

那麼如何返回活動就像後退按鈕?

PS。 我測試了finish()但沒有幫助。

+3

你真的測試完了嗎?怎麼樣?這就是 – lelloman 2013-03-15 11:08:56

+2

finish()的方式。這是什麼意思,它沒有幫助?也許你的內存不足,Android必須重建你的Activity? – Zielony 2013-03-15 11:10:22

+0

我不認爲有任何保證,您以前的活動仍然可用。如果活動已被垃圾收集,您最好使用偏好或某種存儲來保存狀態。 – Davos555 2013-03-15 11:12:42

回答

25

,你可以叫onBackPressed()而不是使用Intent回去MainActivity ..

例如:

public void onClick() { 
    onBackPressed(); 
} 

注:finish()應該做的正是你想要的..

+0

這就是答案@Jonas – 2013-03-15 11:15:22

4

假設你有兩個活動A和B.你從A導航到B.一個去背景。

B放回堆棧,B重點關注。當您點擊返回按鈕時,活動B彈出堆棧。活動A重新開始。

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

http://developer.android.com/training/basics/activity-lifecycle/starting.html。一旦被破壞的活動必須重新創建。當屏幕方向改變時,活動將被刪除並重新創建。

http://developer.android.com/training/basics/activity-lifecycle/starting.html

http://developer.android.com/guide/components/tasks-and-back-stack.html。你應該看看後面的堆棧是如何工作的。

在你的情況下完成應該爲你工作(通過按下後退按鈕)。

注意:在除on之外的所有情況下,當您在onCreate()方法內調用finish()後,系統在調用onPause()和onStop()之後調用onDestroy()。

假設你有第三項活動C,並且你想去活動A.

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
if (keyCode == KeyEvent.KEYCODE_BACK) { 
    onBackPressed(); 

} 

return super.onKeyDown(keyCode, event); 
} 

public void onBackPressed() { 
Intent myIntent = new Intent(ActivityC.this, MainActivity.class); 
myIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);// clear back stack 
startActivity(myIntent); 
finish(); 
return; 
}