当Activity重新创建后,ProgressBar的setProgress()方法无效的原因是由于重新创建后ProgressBar的实例被重置,进度值也被重新初始化。要解决这个问题,可以通过保存进度值并在Activity重新创建后恢复它的方式来解决。
以下是一个示例代码,演示如何在Activity重新创建后保存和恢复ProgressBar的进度值:
public class MainActivity extends AppCompatActivity {
private ProgressBar progressBar;
private int progressValue;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
progressBar = findViewById(R.id.progressBar);
if (savedInstanceState != null) {
// 恢复进度值
progressValue = savedInstanceState.getInt("progressValue");
progressBar.setProgress(progressValue);
}
// 执行其他初始化操作
// ...
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
// 保存进度值
outState.putInt("progressValue", progressValue);
}
public void updateProgress(int value) {
progressValue = value;
progressBar.setProgress(progressValue);
}
}
在上面的示例中,我们在onSaveInstanceState()方法中保存ProgressBar的进度值,并在onCreate()方法中根据保存的进度值来恢复进度。
另外,如果进度值是在其他地方改变的,例如点击按钮时更新进度值,可以在更新进度值的地方调用updateProgress()方法来更新ProgressBar的进度。
这样,当Activity重新创建后,进度值会被保存并恢复,ProgressBar的setProgress()方法就能正确地设置进度了。