【发布时间】:2017-12-19 22:35:24
【问题描述】:
在一个活动中,我声明了一个计时器
Chronometer chronometer = findViewById(R.id.timer);
ChronometerViewModel viewModel = ViewModelProviders.of(this).get(ChronometerViewModel.class);
if (viewModel.getStartTime() == null) {
long startTime = SystemClock.elapsedRealtime();
viewModel.setStartTime(startTime);
chronometer.setBase(startTime);
} else {
chronometer.setBase(viewModel.getStartTime());
}
chronometer.start();
ViewModel 类
public class ChronometerViewModel extends ViewModel {
@Nullable
private Long mStartTime;
@Nullable
public Long getStartTime() {
return mStartTime;
}
public void setStartTime(final long startTime) {
this.mStartTime = startTime;
}
}
当我旋转屏幕时,计时器会自动从之前的状态恢复。但是我没有编写任何代码在配置更改时将计时器的当前状态存储到 ViewModel 类。状态如何自动恢复?
我正在关注这个 google 的 codelabs tutorial
编辑:我对 Chronometer 的 setBase 方法感到困惑。我假设我的状态变量 mStartTime 会自动更新为 Chronometer 小部件中显示的当前时间。现在我检查了 setBase 方法的文档。由于 mStartTime 在配置更改时持续存在,我们可以使用 Chronometer 开始的旧值。所以 Chronometer 实际上恢复了。
【问题讨论】:
-
运行应用程序(在运行配置下拉菜单中选择第 2 步)
-
ChronometerViewModel 对象的 startTime 如何随计时器时间更新。我没有看到设置 ChronometerViewModel .setStartTime 方法的代码。@Akhil, @Serj
标签: android viewmodel android-architecture-components