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());
}
}