我有一个水平ProgressBar
,它显示游戏的剩余寿命。当寿命为0(ProgressBar
进度为0)时,游戏结束,并且有一个RESTART按钮,它调用activity.recreate();
。重新创建时,进度必须再次显示为满,但显示为空(进度0)。
除了ProgressBar
以外,其他所有工具都工作正常并且可以正确地重新创建。 onCreate()方法具有以下几行:
lifeProgressBar = findViewById(R.id.lifeProgressBar);
lifeProgressBar.setMax(4);
lifeProgressBar.setProgress(4);
重新创建活动时,将再次调用这些行。即使放置断点,我也可以看到进度为4,,但是ProgressBar显示为空,与重新创建活动之前一样。
我尝试了无效,后无效等...不起作用。
如何解决这个问题?
答案 0 :(得分:1)
摘自recreate文档:
public void recreate ()
使该活动与新实例一起重新创建。结果 基本上与创建活动时的流程相同,这是由于 配置更改-当前实例将经历其 onDestroy()的生命周期,然后在它之后创建一个新实例。
这是重新创建活动时的活动生命周期:
onSaveInstanceState()
//保存生活进度条的当前进度(您的情况为0)
onDestroy()
onCreate()
//您填写了完整的进度条
onRestoreInstanceState()
// [重要]活动将还原先前的状态并将生命进度条设置为0。
这是Android的预期行为,如果您需要在重新创建活动后填写完整的生活进度栏,则需要在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();
}
答案 1 :(得分:0)
像这样重新创建活动将对您有用。
finish();
startActivity(getIntent());
overridePendingTransition(0, 0);