Android 传递savedInstanceState时无法在onCreate中修改视图

Android 传递savedInstanceState时无法在onCreate中修改视图,android,Android,在onCreate(null)中首次初始化android应用程序后,我似乎无法修改布局视图,当我最小化应用程序并再次打开它时onCreate(savedInstanceState),我的所有功能,如setText似乎都无关紧要 为什么我的应用程序停留在“午安”状态,而没有按照记录器显示“晚安”?在默认视图状态下,将在onRestoreInstanceState中保存和还原。由于onrestoreinnstancestate在onCreate之后调用,即使您在onCreate中更改了文本,它也会

onCreate(null)
中首次初始化android应用程序后,我似乎无法修改布局视图,当我最小化应用程序并再次打开它时
onCreate(savedInstanceState)
,我的所有功能,如
setText
似乎都无关紧要


为什么我的应用程序停留在“午安”状态,而没有按照记录器显示“晚安”?在默认视图状态下,将在
onRestoreInstanceState
中保存和还原。由于
onrestoreinnstancestate
onCreate
之后调用,即使您在
onCreate
中更改了文本,它也会在
onrestoreinnstancestate
中变回保存状态

您的解决方案是将视图恢复从
onCreate
移动到
onRestoreInstanceState

onRestoreInstanceState
将调用时

此方法在onStart()onPostCreate(Bundle)之间调用

当您的活动开始停止时,系统将调用 onSaveInstanceState()方法,以便您的活动可以保存状态 包含键值对集合的信息默认值 此方法的实现保存了有关 活动视图层次结构的状态,例如 EditText小部件或ListView小部件的滚动位置。你的应用程序 应在 onPause()方法,并在onStop()之前。不要实现此回调 在onPause()中


有关更多信息,请参见

在默认视图中,状态将在onRestoreInstanceState中保存和恢复。由于
onrestoreinnstancestate
onCreate
之后调用,即使您在
onCreate
中更改了文本,它也会在
onrestoreinnstancestate
中变回保存状态

您的解决方案是将视图恢复从
onCreate
移动到
onRestoreInstanceState

onRestoreInstanceState
将调用时

此方法在onStart()onPostCreate(Bundle)之间调用

当您的活动开始停止时,系统将调用 onSaveInstanceState()方法,以便您的活动可以保存状态 包含键值对集合的信息默认值 此方法的实现保存了有关 活动视图层次结构的状态,例如 EditText小部件或ListView小部件的滚动位置。你的应用程序 应在 onPause()方法,并在onStop()之前。不要实现此回调 在onPause()中


有关更多信息,请参见

尝试按以下方式使用堆栈[尝试按以下方式使用堆栈[其中有说明“在默认视图状态下将在onRestoreInstanceState中保存并还原”的文档,它与生命周期(在您的活动生命周期中)相关如果活动必须销毁和重新创建,则所有值都将保存在onSaveInstance中,并在onRestoreInstance中恢复,您可以从清单文件中更改此行为。非常感谢您,它终于起作用了-如果没有您的帮助,根本无法解决此问题(花了6个多小时)我很乐意为您提供帮助,说明“在默认视图状态下,将在onRestoreInstanceState中保存和恢复”的文档在哪里?它与生命周期相关(在您的案例中是活动生命周期)如果像旋转一样改变了活动必须销毁和重新创建,所有值将保存在onSaveInstance中,并在onRestoreInstance中恢复,您可以从清单文件中更改此行为。非常感谢您,它最终成功了-如果没有您的帮助(花了6个多小时),我很高兴能帮助您
package com.example.www.i_fucking_hate_java;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.EditText;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        if (savedInstanceState == null)
        {
            // this will work
            ((EditText) findViewById(R.id.editText)).setText("Good afternoon");
            Log.d("Me", "Running 1 " + ((EditText) findViewById(R.id.editText)).getText().toString());
        }
        else
        {
            // k so we have an old instance,
            // problem is now our "handles" to our EditTexts are useless

            // THIS WILL NOT WORK ??????????????????????????????????????????
            // the value returned by getText is correct, but the emulator display
            // does not change - also I hate android
            ((EditText) findViewById(R.id.editText)).setText("Good night");
            Log.d("Me", "Running 2 " + ((EditText) findViewById(R.id.editText)).getText().toString());
        }

//        // this will work
//        ((EditText) findViewById(R.id.editText)).setText("Good morning");
//        Log.d("Me", "Running 3 "  + ((EditText) findViewById(R.id.editText)).getText().toString());
    }
}