[英]Restoring state not working when returning to activity, savedInstanceState is null
所以我在恢复我的Activity
状态时遇到了一些麻烦。 在这一点上,我认为这可能是我理解的问题,而不是其他任何问题。
我的目标是从MainActivity
转到Main2Activity
。 我是否正确地认为,当用户从一页移动到另一页时,应该通过Intent
更改Activity
来完成? 我这样做是这样的:
我的MainActivity
的onCreate()
有这个。
Button currentButton = (Button) findViewById(R.id.button2);
currentButton.setOnClickListener(
new View.OnClickListener() {
@Override
public void onClick(View view) {
setContentView(R.layout.activity_main2);
Intent nextIntent = new Intent(getApplicationContext(), Main2Activity.class);
startActivity(nextIntent);
}
}
);
其中按我的理解应该叫onCreate()
onStart()
和onResume()
为Main2Activity,那么onSaveInstanceState()
为MainActivity
,那么onStop()
为MainActivity
。 我已经用日志记录重载了所有这些函数,并看到它们确实按照该顺序被调用。
这是我的MainActivity
onSaveInstanceState()
:
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
System.out.println("onSaveInstanceState called, saving state");
savedInstanceState.putInt("mySuperUniqueKey", testInt);
super.onSaveInstanceState(savedInstanceState);
}
进入Main2Activity
,我将以相同的方式返回MainActivity
。 即按钮findViewById(),重载其onClickListener()
,创建一个新的Intent
并启动它。
然后MainActivity
类的onCreate()
具有以下内容:
if (savedInstanceState != null) {
System.out.println("savedInstanceState is not null");
testInt = savedInstanceState.getInt("mySuperUniqueKey");
} else {
System.out.println("savedInstanceState is null");
}
从Main2Activity
返回MainActivity
时,从日志中可以看到onCreate()
, then onStart()
, MainActivity
onResume()
onStop()
, Main2Activity
onStop()
。 不幸的是,该日志记录显示savedInstanceState
始终返回为null。
除此之外,当在仿真器中时,来回切换方向可以使其完美工作。 savedInstanceState
不为null,并且具有保存的testInt。 因此,根据我的理解,我认为这是一个问题,必须缺少一些东西。
我的gradle的minSdkVersion设置为16,targetSdkVersion设置为28。我可能将minSdkVersion设置的太低了吗?
我已经阅读了官方android开发人员文档中的“了解活动生命周期”,但仍然无法获取。 https://developer.android.com/guide/components/activities/activity-lifecycle
我确实发现了类似的问题,但都没有一个符合我的情况,还有他们建议我已经采取的解决方案。
在此先感谢您的任何见解。
保存的实例状态包用于在方向更改之类的事物之间保存当前活动的状态。 它并非旨在在各种活动中持续存在。 您应该使用Intent#putExtra
:
nextIntent.putExtra("mySuperUniqueKey", testInt);
然后,在您的下一个活动中,使用以下命令访问此传递的值:
int testInt = getIntent().getIntExtra("mySuperUniqueKey");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.