在向上导航中的ActivityA上调用onCreate

所以我有一个活动A和一个活动B.我希望活动A能够按下button导航到活动B. 这是有效的,但是当我使用向上导航(操作栏中的主页button)导航回到活动A时,会再次调用onCreate(),并且用户input的旧信息将丢失。

我已经看到: onCreate总是被称为如果意图导航回来 ,但他们使用片段,我希望不必重新devise整个应用程序使用片段。 每当活动A再次变为活动状态时,是否有任何方法可以阻止onCreate()被调用?

Solutions Collecting From Web of "在向上导航中的ActivityA上调用onCreate"

这种行为是完全没有问题的。 系统可能决定停止在后台的Activities来释放一些内存。 同样的事情发生时,例如旋转设备。

通常,将实例状态(如input的文本和内容)保存到包中,并在重新创build“ 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); } 

你可以通过覆盖onSupportNavigateUp()来使向上button的行为像回头一样,

  @Override public boolean onSupportNavigateUp() { onBackPressed(); return true; } 

如果你想从父子节点导航而不重新创build父节点(调用onCreate方法),你可以在你的AndroidManifest.xml为父活动设置android:launchMode="singleTop"属性