ProgressBar setProgress() 在 Activity recreate() 后不工作
ProgressBar setProgress() not working after Activity recreate()
我有一个水平的 ProgressBar
显示游戏中的剩余生命。当生命为 0(ProgressBar
进度为 0)时游戏结束并且有一个按钮 RESTART 调用 activity.recreate();
。重新创建时必须再次显示进度,但显示为空(进度 0)。
一切正常,并且正在正确重新创建,但 ProgressBar
。 onCreate() 方法有这样几行:
lifeProgressBar = findViewById(R.id.lifeProgressBar);
lifeProgressBar.setMax(4);
lifeProgressBar.setProgress(4);
重新创建 activity 时,将再次调用这些行。即使设置断点,我也可以看到进度为 4,但是 ProgressBar 显示为空,与重新创建 activity.
之前相同
我尝试了 invalidate、postinvalidate 等……没用。
如何解决?
像这样重新创建您的 activity 对您有用。
finish();
startActivity(getIntent());
overridePendingTransition(0, 0);
来自 recreate 文档:
public void recreate ()
Cause this Activity to be recreated with a new instance. This results
in essentially the same flow as when the Activity is created due to a
configuration change -- the current instance will go through its
lifecycle to onDestroy() and a new instance then created after it.
以下是 activity 重新创建 activity 时的生命周期:
onSaveInstanceState()
// 生命进度条保存当前进度(你的情况是0)
onDestroy()
onCreate()
// 你填满生命进度条
onRestoreInstanceState()
// [重要] Activity 恢复之前的状态并将生命进度条的进度设置为 0.
这是 Android 的预期行为,如果您需要在 activity 重新创建后填充完整的生命进度条,则需要在 onRestoreInstanceState()
中完成。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lifeProgressBar = findViewById(R.id.lifeProgressBar);
fillFullLifeProgressBar();
}
private void fillFullLifeProgressBar() {
lifeProgressBar.setMax(4);
lifeProgressBar.setProgress(4);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
// Fill full life progress bar here.
fillFullLifeProgressBar();
}
我有一个水平的 ProgressBar
显示游戏中的剩余生命。当生命为 0(ProgressBar
进度为 0)时游戏结束并且有一个按钮 RESTART 调用 activity.recreate();
。重新创建时必须再次显示进度,但显示为空(进度 0)。
一切正常,并且正在正确重新创建,但 ProgressBar
。 onCreate() 方法有这样几行:
lifeProgressBar = findViewById(R.id.lifeProgressBar);
lifeProgressBar.setMax(4);
lifeProgressBar.setProgress(4);
重新创建 activity 时,将再次调用这些行。即使设置断点,我也可以看到进度为 4,但是 ProgressBar 显示为空,与重新创建 activity.
之前相同我尝试了 invalidate、postinvalidate 等……没用。
如何解决?
像这样重新创建您的 activity 对您有用。
finish();
startActivity(getIntent());
overridePendingTransition(0, 0);
来自 recreate 文档:
public void recreate ()
Cause this Activity to be recreated with a new instance. This results in essentially the same flow as when the Activity is created due to a configuration change -- the current instance will go through its lifecycle to onDestroy() and a new instance then created after it.
以下是 activity 重新创建 activity 时的生命周期:
onSaveInstanceState()
// 生命进度条保存当前进度(你的情况是0)
onDestroy()
onCreate()
// 你填满生命进度条
onRestoreInstanceState()
// [重要] Activity 恢复之前的状态并将生命进度条的进度设置为 0.
这是 Android 的预期行为,如果您需要在 activity 重新创建后填充完整的生命进度条,则需要在 onRestoreInstanceState()
中完成。
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lifeProgressBar = findViewById(R.id.lifeProgressBar);
fillFullLifeProgressBar();
}
private void fillFullLifeProgressBar() {
lifeProgressBar.setMax(4);
lifeProgressBar.setProgress(4);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
// Fill full life progress bar here.
fillFullLifeProgressBar();
}