2013-03-15 73 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; 
}