【问题标题】:How to save chronometer time like variables如何像变量一样保存计时器时间
【发布时间】: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


    【解决方案1】:

    对于那些可能想知道我是如何解决它的人。 我将pauseOffSetrunningchronometer.getBase() 变量存储在Sharedpreferences 中,特别是在onStop() 方法中,并在我的onStart() 方法中检索它们。在 Flow 的网站上编码是他倒计时计时器的灵感来源。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-09
      • 2022-01-25
      • 1970-01-01
      相关资源
      最近更新 更多