我有应用程序,当我使用Intent
和startActivity()
导航回来时,views
为空,调用onCreate()
并重新初始化活动。为什么这样以及如何绕过它?
我导航回到这样的活动:
@Override
public void onBackPressed() {
if (this.getClass() == XXX.class) {
Intent i = new Intent(this, YYY.class);
startActivity(i); //<-- activity restarts
return;
}
}
super.onBackPressed();
}
我使用ActionbarSherlock,因此我有ActionBar初始化的活动,每个活动都只是扩展它。本活动描述了我导航回活动的方式。
@Override
protected void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_screen);
initUIComponents();
setListeners();
resetProgress();
}
和initUI()初始化UI。
修改
我是什么意思,我怎样才能回到以前创建的activity
(不是通过onBackPressed
调用的那个)并且不重新创建它?我使用startActivity
(),但显然它重新创建了整个事物
答案 0 :(得分:0)
如果您在按下时需要,则需要显示上一个屏幕,然后您不必在代码中执行此操作。 Android Runtime在内部维护堆栈,并在您按下时显示 last-shown-activity 。无需通过onBackPressed()
但是,如果您需要此默认操作以外的其他操作,那么 就应该使用onBackPressed()
。否则,让Android处理它。
因此,在您的应用中,如果Activity 1
调用Activity 2
,并且用户按下,则默认操作将是再次显示Activity 1
。不要覆盖onBackPressed()
方法
修改强>
对于自定义的活动流程,您必须自己构建逻辑。您需要覆盖onRestart()
中的Activity 1
和onStop()
中的Activity 3
。这样,onCreate
将不再被调用。根据你的逻辑,我的意思是,标记来跟踪你所处的活动,检查那些标志,并从那里调用所需的活动。
编辑2: 这个以前的SO问题,回答你的需求:
Android Activity management,建议在意图上设置标记FLAG_ACTIVITY_REORDER_TO_FRONT,然后调用startActivity()
使用其他堆栈重新排序选项的Intent标记检查Android活动堆栈管理:Stack management