onCreate在向上导航中调用活动A.

时间:2013-10-07 02:53:39

标签: android android-activity android-lifecycle

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

我已经看到了onCreate always called if navigating back with intent,但是他们使用了片段,我希望不必重新设计整个应用程序来使用片段。每次活动A再次变为活动状态时,有没有什么方法可以阻止onCreate()被调用?

3 个答案:

答案 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属性