因此,我在恢复Activity
的状态时遇到了一些麻烦。
在这一点上,我认为这可能是我的理解存在问题,而不是其他任何问题。
我的目标是从我的MainActivity
转到Main2Activity
。
我是否正确地认为,当用户从一页移动到另一页时,应该通过Activity
来更改Intent
来完成?
我这样做是这样的:
我的onCreate()
的{{1}}里面有这个。
MainActivity
据我所知,应该为Main2Activity调用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()
调用onSaveInstanceState()
,然后为{ {1}}。
我已经用日志记录重载了所有这些函数,并看到确实按顺序调用了它们。
这是我的MainActivity
的{{1}}:
onStop()
在MainActivity
中,我以相同的方式返回到onSaveInstanceState()
。即findViewById()按钮,使其MainActivity
重载,创建一个新的@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
System.out.println("onSaveInstanceState called, saving state");
savedInstanceState.putInt("mySuperUniqueKey", testInt);
super.onSaveInstanceState(savedInstanceState);
}
并启动它。
然后Main2Activity
类的MainActivity
具有以下内容:
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");
}
,然后是MainActivity
的{{1}}被调用,然后Main2Activity
代表onCreate()
。不幸的是,日志记录显示then onStart()
总是返回空值。
此外,当在仿真器中时,来回切换方向可使它完美工作; onResume()
不为null,并且具有保存的testInt。
因此,根据我的理解,我认为这是一个问题,必须缺少一些东西。
我的gradle的minSdkVersion设置为16,targetSdkVersion设置为28。我可能将minSdkVersion设置为太低了吗?
我已经阅读了官方android开发人员文档中的“了解活动生命周期”,但仍然无法获取。 https://developer.android.com/guide/components/activities/activity-lifecycle
我确实发现了类似的问题,但都没有一个符合我的情况,也有他们建议我已经解决的解决方案。
任何见解将不胜感激,谢谢。
答案 0 :(得分:0)
已保存的实例状态包旨在保存方向变化之类的 current 活动的状态。它并非旨在在各种活动中持续存在。您应该使用Intent#putExtra
:
nextIntent.putExtra("mySuperUniqueKey", testInt);
然后,在您的下一个活动中,使用以下命令访问此传递的值:
int testInt = getIntent().getIntExtra("mySuperUniqueKey");