为什么在按下 "back" 按钮后不调用 onSaveInstanceState()?
Why is onSaveInstanceState() not called after pressing "back" button?
我正在创建一个保龄球比分应用程序,其中将包含一个宾果游戏。为简化起见,在 Score class 处有一个按钮将开始新的 activity(Bingo class)。在游戏中,肯定需要在 Score 和 Bingo 之间来回切换。我现在面临的问题是当我尝试 "back" 从 Bingo 到 Score 时,没有调用 onSaveInstanceState。因此,每次我单击启动宾果游戏的 "Game" 按钮时,应该固定的宾果游戏号码都会发生变化。
我一直在搜索并尝试所有相关答案(包括 https://developer.android.com/guide/components/activities/activity-lifecycle),但对我来说没有任何效果。当我读到屏幕旋转将创建一个新实例时,我还尝试暂时删除任何 activity 上的 screenOrientation。这是与问题相关的代码。
Score.java(移动宾果的按钮)
@Override
public void onClick(View view) {
String button_text;
button_text = ((Button) view).getText().toString();
if (button_text.equals("GAME")) {
Intent gamePage = new Intent(this, Game.class);
startActivity(gamePage);
}
Game.java(bingo1和bingo2为整数数组)
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_game);
...
if (savedInstanceState != null){
bingo1 = savedInstanceState.getIntArray("bingo1");
bingo2 = savedInstanceState.getIntArray("bingo2");
}else {
...
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
savedInstanceState.putIntArray("bingo1", bingo1);
savedInstanceState.putIntArray("bingo2", bingo2);
super.onSaveInstanceState(savedInstanceState);
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
bingo1 = savedInstanceState.getIntArray("array1");
bingo2 = savedInstanceState.getIntArray("array2");
}
如果同时调用 onCreate() 和 onRestoreInstanceState 是错误的,请纠正我。
如前所述,我试图在从 Score 到 Game/Bingo 的整个来回移动中修复宾果号码,但使用这些代码未能实现。我不知道是否有更多与问题相关的代码,因为我还是新手,但如果你们能提供帮助,那将非常有帮助。谢谢!
我假设 Bingo 和 Score 都是活动。
The problem that I'm facing right now is the onSaveInstanceState is not called when I tried to "back" from Bingo to Score
那时不应该调用它。您的 Bingo activity 实例正在被永久销毁。它没有更多的实例状态可以保存。
如果 Bingo 和 Score 应该共享公共状态,那么也许它们不应该是单独的活动。相反,使用一个 activity,两个片段(Bingo 和 Score),它们之间共享一个 ViewModel
。
我正在创建一个保龄球比分应用程序,其中将包含一个宾果游戏。为简化起见,在 Score class 处有一个按钮将开始新的 activity(Bingo class)。在游戏中,肯定需要在 Score 和 Bingo 之间来回切换。我现在面临的问题是当我尝试 "back" 从 Bingo 到 Score 时,没有调用 onSaveInstanceState。因此,每次我单击启动宾果游戏的 "Game" 按钮时,应该固定的宾果游戏号码都会发生变化。
我一直在搜索并尝试所有相关答案(包括 https://developer.android.com/guide/components/activities/activity-lifecycle),但对我来说没有任何效果。当我读到屏幕旋转将创建一个新实例时,我还尝试暂时删除任何 activity 上的 screenOrientation。这是与问题相关的代码。
Score.java(移动宾果的按钮)
@Override
public void onClick(View view) {
String button_text;
button_text = ((Button) view).getText().toString();
if (button_text.equals("GAME")) {
Intent gamePage = new Intent(this, Game.class);
startActivity(gamePage);
}
Game.java(bingo1和bingo2为整数数组)
...
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_game);
...
if (savedInstanceState != null){
bingo1 = savedInstanceState.getIntArray("bingo1");
bingo2 = savedInstanceState.getIntArray("bingo2");
}else {
...
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
savedInstanceState.putIntArray("bingo1", bingo1);
savedInstanceState.putIntArray("bingo2", bingo2);
super.onSaveInstanceState(savedInstanceState);
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
bingo1 = savedInstanceState.getIntArray("array1");
bingo2 = savedInstanceState.getIntArray("array2");
}
如果同时调用 onCreate() 和 onRestoreInstanceState 是错误的,请纠正我。
如前所述,我试图在从 Score 到 Game/Bingo 的整个来回移动中修复宾果号码,但使用这些代码未能实现。我不知道是否有更多与问题相关的代码,因为我还是新手,但如果你们能提供帮助,那将非常有帮助。谢谢!
我假设 Bingo 和 Score 都是活动。
The problem that I'm facing right now is the onSaveInstanceState is not called when I tried to "back" from Bingo to Score
那时不应该调用它。您的 Bingo activity 实例正在被永久销毁。它没有更多的实例状态可以保存。
如果 Bingo 和 Score 应该共享公共状态,那么也许它们不应该是单独的活动。相反,使用一个 activity,两个片段(Bingo 和 Score),它们之间共享一个 ViewModel
。