【发布时间】:2020-08-25 08:52:32
【问题描述】:
我在保存 Chronometer 时间跨活动和重新启动时遇到了一些麻烦。当我尝试使用 SharedPreferences 时,我卡住了,因为 Chronometer 不是像 int 和 String 这样的变量类型。
为了保存变量,我这样做
SharedPreferences myVar = getSharedPreferences("VarName", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = myVar.edit();
editor.putInt("var", integer);
editor.commit();
并检索
SharedPreferences myVar = this.getSharedPreferences("VarName",Context.MODE_PRIVATE);
integer= myVar.getInt("var",0);
TextView.setText(String.valueOf(integer));
但是当涉及到 Chronometer 时,我不知道在“editor.put***();”中放入什么,它通常会在一个循环中结束,其中我被调用的值为 null,所以它要么崩溃,要么没有任何变化。
我尝试过创建和 onDestroy() 方法,并在里面使用这个chronometer.setBase(SystemClock.elapsedRealtime());,但它不起作用。我也试过 onRestoreInstanceState() 也不起作用。
这是我的简易计时器
chronometer = findViewById(R.id.chronometer);
chronometer.setFormat("Duration: %s");
chronometer.setBase(SystemClock.elapsedRealtime());
final ToggleButton toggleButton = findViewById(R.id.toggle_chronometer);
/**
* Toggles start and stop on the chronometer
*/
toggleButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (toggleButton.isChecked()){
if(!running){
chronometer.setBase(SystemClock.elapsedRealtime() - pauseOffset);
chronometer.start();
running = true;
}
}else{
if(running){
chronometer.stop();
pauseOffset = SystemClock.elapsedRealtime() - chronometer.getBase();
showElapsedTime();
running = false;
}
}
}
});
/**
* Resets the chronometer
*/
public void resetChronometer(View v){
chronometer.setBase(SystemClock.elapsedRealtime());
showElapsedTime();
pauseOffset = 0;
}
我该如何解决这个问题?
【问题讨论】:
标签: android