所以我有一个活动A和一个活动B.我希望活动A能够通过按下按钮导航到活动B.这是有效的,但是当我使用向上导航(操作栏中的主页按钮)导航回活动A时,再次调用onCreate()并且用户输入的旧信息将丢失。
我已经看到了onCreate always called if navigating back with intent,但是他们使用了片段,我希望不必重新设计整个应用程序来使用片段。每次活动A再次变为活动状态时,有没有什么方法可以阻止onCreate()被调用?
答案 0 :(得分:14)
这种行为完全没问题。
系统可能决定停止处于后台的Activities
以释放一些内存。
同样的事情发生在例如旋转设备。
通常,您将实例状态(如输入的文本和内容)保存到一个包中,并在重新创建Activity
时从包中获取这些值。
以下是我使用的一些标准代码:
private EditText mSomeUserInput;
private int mSomeExampleField;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// TODO inflate layout and stuff
mSomeUserInput = (EditText) findViewById(R.id.some_view_id);
if (savedInstanceState == null) {
// TODO instanciate default values
mSomeExampleField = 42;
} else {
// TODO read instance state from savedInstanceState
// and set values to views and private fields
mSomeUserInput.setText(savedInstanceState.getString("mSomeUserInput"));
mSomeExampleField = savedInstanceState.getInt("mSomeExampleField");
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// TODO save your instance to outState
outState.putString("mSomeUserInput", mSomeUserInput.getText().toString());
outState.putInt("mSomeExampleField", mSomeExampleField);
}
答案 1 :(得分:14)
您可以通过覆盖onSupportNavigateUp()
@Override
public boolean onSupportNavigateUp() {
onBackPressed();
return true;
}
答案 2 :(得分:4)
如果您想在不重新创建父项的情况下从子项导航到父项(调用onCreate方法),您可以在android:launchMode="singleTop"
AndroidManifest.xml
属性