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

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

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

  • locking屏幕后调用Android onCreate
  • 使用匕首的Android生命周期库ViewModel 2
  • 在没有onpause()或onstop()的情况下调用ondestroy()的Android场景
  • 在FragmentTransaction.replace()后跟后退按钮后,不会重新创建ViewPager片段
  • 活动开始时的animation跳转
  • 方向更改后,Android DialogFragment消失
  • Android应用程序组件破坏和娱乐的详细信息
  • 活动和片段生命周期和方向变化
  • 这种行为是完全没有问题的。 系统可能决定停止在后台的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"属性